估计文件中的行数。
lcw的Python项目详细描述
lcw类似于wc -l,但速度更快,精度更低,而且同样精确。
usage: lcw [-h] [--sample-size N] [--page-size PAGE_SIZE] [--pattern PATTERN] [--regex] file [file ...] Estimate how many lines are in a file. positional arguments: file optional arguments: -h, --help show this help message and exit --sample-size N, -n N How many pages to count (default: 1000) --page-size PAGE_SIZE, -p PAGE_SIZE Size of an observation (default: 16384) --pattern PATTERN, -e PATTERN The pattern to match (default: b'\n') --regex, -r Use regular expressions (statistically unsound) (default: False)
速度
它比大文件上的wc -l快。
$ wc -c big-file.csv 1071895374 big-file.csv $ time lcw big-file.csv 2386238 ± 22903 lines (99% confidence) real 0m0.172s user 0m0.140s sys 0m0.027s $ time wc -l big-file.csv 2388430 big-file.csv real 0m1.379s user 0m1.170s sys 0m0.197s
数学
LCW使用基本统计数据对 文件中的行数。它在 文件并计算每页中有多少换行符。
它将平均计数乘以文件中的页数 为了得到文件中行数的最佳猜测 (最大似然估计),然后计算99%的正常值。 置信区间,对 估计样本总数的标准差。
调谐
最好使用存储介质使用的页面大小; 现代存储媒体一次读取整个页面,因此使用页面大小 太小对性能不利。
样本大小是用-n设置的,典型的经验法则是 这应该是至少20的信心水平是有效的。 页面大小是用-p设置的,应该类似于 2048、4096、8192或16384。
匹配除换行符以外的内容
您可以计算除换行符以外的字符串的出现次数;指定 带-e的字符串。它将被解释为正则表达式 如果你通过-r。统计估计不包括 正则表达式的可变长度匹配,因此您最好 如果你关心准确度的话,可以使用普通字符串。
未来工作
我一直在考虑如何快速从大量文件中取样。 像lcw这样的东西可以帮助我们处理文件中的样本,但是它可以 可能是更广泛的调查计划的一部分,采用整群抽样或 目录或文件名分层,采用多级抽样, 利用中试估计不同样本的抽样成本 文件夹。
LCW目前使用一个简单的随机样本。因为文本文件中的数据 通常随文件中的位置而变化(后面的行通常 与以后的日期相对应。)系统抽样是合适的。
<>或者,这个已经存在了,所以我不必写了吗?