我有一个大小约1 GB的CSV文件,由于我的笔记本电脑是基本配置,我无法在Excel或R中打开文件.但出于好奇,我想得到的行数文件.我怎么做,如果我能做到的话?
Ton*_*uth 34
对于Linux/Unix:
wc -l filename
Run Code Online (Sandbox Code Playgroud)
对于Windows:
find /c /v "A String that is extremely unlikely to occur" filename
Run Code Online (Sandbox Code Playgroud)
Ric*_*ven 22
选项1:
通过文件连接,count.fields()根据某些sep值(我们在此不关心)计算文件每行的字段数.因此,如果我们采用该结果的长度,理论上我们应该最终得到文件中的行数(和行数).
length(count.fields(filename))
Run Code Online (Sandbox Code Playgroud)
如果您有标题行,则可以跳过它 skip = 1
length(count.fields(filename, skip = 1))
Run Code Online (Sandbox Code Playgroud)
还有其他参数可以根据您的特定需求进行调整,例如跳过空白行.
args(count.fields)
# function (file, sep = "", quote = "\"'", skip = 0, blank.lines.skip = TRUE,
# comment.char = "#")
# NULL
Run Code Online (Sandbox Code Playgroud)
了解help(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
Run Code Online (Sandbox Code Playgroud)
(效率更高)选项2: 另一个想法是data.table::fread()仅使用读取第一列,然后获取行数.这将非常快.
system.time(nrow(fread("Batting.csv", select = 1L)))
# user system elapsed
# 0.063 0.000 0.063
Run Code Online (Sandbox Code Playgroud)
根据前 1000 行的大小估计行数
size1000 <- sum(nchar(readLines(con = "dgrp2.tgeno", n = 1000)))
sizetotal <- file.size("dgrp2.tgeno")
1000 * sizetotal / size1000
Run Code Online (Sandbox Code Playgroud)
这对于大多数用途来说通常已经足够了 - 对于大文件来说速度要快得多。
| 归档时间: |
|
| 查看次数: |
27408 次 |
| 最近记录: |