R 是否可以在不打开CSV文件的情况下获取CSV文件中的行数?
我有一个大小为1 GB的CSV文件,由于我的笔记本电脑是基本配置,我无法在Excel或R中打开该文件。但出于好奇,我想获取文件中的行数。如果我能做到,我该怎么做?对于Linux/Unix:R 是否可以在不打开CSV文件的情况下获取CSV文件中的行数?,r,excel,csv,R,Excel,Csv,我有一个大小为1 GB的CSV文件,由于我的笔记本电脑是基本配置,我无法在Excel或R中打开该文件。但出于好奇,我想获取文件中的行数。如果我能做到,我该怎么做?对于Linux/Unix: wc -l filename 对于Windows: find /c /v "A String that is extremely unlikely to occur" filename 对于Linux/Unix: wc -l filename 对于Windows: find /c /v "A Strin
wc -l filename
对于Windows:
find /c /v "A String that is extremely unlikely to occur" filename
对于Linux/Unix:
wc -l filename
对于Windows:
find /c /v "A String that is extremely unlikely to occur" filename
选项1: 通过文件连接,
count.fields()
根据一些sep
值(我们这里不关心)计算文件每行的字段数。因此,如果我们计算结果的长度,理论上我们应该得到文件中的行数
length(count.fields(filename))
如果有标题行,可以使用skip=1
length(count.fields(filename, skip = 1))
您还可以根据自己的具体需要调整其他参数,例如跳过空行
args(count.fields)
# function (file, sep = "", quote = "\"'", skip = 0, blank.lines.skip = TRUE,
# comment.char = "#")
# NULL
有关更多信息,请参阅帮助(count.fields)
就速度而言还不错。我在一个包含99846行的棒球文件上测试了它
nrow(data.table::fread("Batting.csv"))
# [1] 99846
system.time({ l <- length(count.fields("Batting.csv", skip = 1)) })
# user system elapsed
# 0.528 0.000 0.503
l
# [1] 99846
file.info("Batting.csv")$size
# [1] 6153740
选项1: 通过文件连接,
count.fields()
根据一些sep
值(我们这里不关心)计算文件每行的字段数。因此,如果我们计算结果的长度,理论上我们应该得到文件中的行数
length(count.fields(filename))
如果有标题行,可以使用skip=1
length(count.fields(filename, skip = 1))
您还可以根据自己的具体需要调整其他参数,例如跳过空行
args(count.fields)
# function (file, sep = "", quote = "\"'", skip = 0, blank.lines.skip = TRUE,
# comment.char = "#")
# NULL
有关更多信息,请参阅帮助(count.fields)
就速度而言还不错。我在一个包含99846行的棒球文件上测试了它
nrow(data.table::fread("Batting.csv"))
# [1] 99846
system.time({ l <- length(count.fields("Batting.csv", skip = 1)) })
# user system elapsed
# 0.528 0.000 0.503
l
# [1] 99846
file.info("Batting.csv")$size
# [1] 6153740
下面是我用过的东西:
testcon <- file("xyzfile.csv",open="r")
readsizeof <- 20000
nooflines <- 0
( while((linesread <- length(readLines(testcon,readsizeof))) > 0 )
nooflines <- nooflines+linesread )
close(testcon)
nooflines
testcon以下是我使用的一些东西:
testcon <- file("xyzfile.csv",open="r")
readsizeof <- 20000
nooflines <- 0
( while((linesread <- length(readLines(testcon,readsizeof))) > 0 )
nooflines <- nooflines+linesread )
close(testcon)
nooflines
testcon根据前1000行的大小估计行数
size1000 <- sum(nchar(readLines(con = "dgrp2.tgeno", n = 1000)))
sizetotal <- file.size("dgrp2.tgeno")
1000 * sizetotal / size1000
size1000根据前1000行的大小估计行数
size1000 <- sum(nchar(readLines(con = "dgrp2.tgeno", n = 1000)))
sizetotal <- file.size("dgrp2.tgeno")
1000 * sizetotal / size1000
size1000可能只是从命令行提示符下执行wc-l yourfile.csv
之类的操作?如果文件大小为1 GB,您应该能够导入它。当然,您不应该对read.table
和朋友这样做。使用package data.table中的fread
。那么您是说nrow(read.csv(“file.csv”,header=T/F))
R?是的,fread
当然可以prefered@Alex不要对1GB文件使用read.csv
。速度很慢。如果所有方法都崩溃,您可以使用csv拆分器将大文件拆分为块。。不是很优雅,但可能可以通过命令行提示符下的wc-lyourfile.csv
或其他方式工作?如果文件大小为1GB,您应该可以导入它。当然,您不应该对read.table
和朋友这样做。使用package data.table中的fread
。那么您是说nrow(read.csv(“file.csv”,header=T/F))
R?是的,fread
当然可以prefered@Alex不要对1GB文件使用read.csv
。速度很慢。如果所有方法都崩溃,您可以使用csv拆分器将大文件拆分为块。。虽然不优雅,但可能有效,选择2更好。data.table获胜。#选项2更好。关于“Windows”解决方案,请注意:(1)这是从cmd.exe
运行的;(2) filename
包含文件的完整路径(&将斜杠转过来);(3) 如果有一个标题,则该“行”被计数,即,一个标题+10行的文件将返回11
。(所有这些都不会影响答案的质量。)关于“Windows”解决方案,请注意:(1)这是从cmd.exe
运行的;(2) filename
包含文件的完整路径(&将斜杠转过来);(3) 如果有一个标题,则该“行”被计数,即,一个标题+10行的文件将返回11
。(所有这些都不会影响答案的质量。)