估算文件中的行数。
项目描述
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目前使用简单随机抽样。由于文本文件中的数据往往与其在文件中的位置有关(后续行通常对应较晚的日期),系统抽样将更合适。
或者,这已经存在,所以我不必写它了?
项目详情
关闭
lcw-0.0.5.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | bcb44e82b27150a3e9fdee400ffa435a4c97124fbaeb97a6b62bd3c9814932dc |
|
MD5 | 3bae78f0eb19536c35e6084fff96de80 |
|
BLAKE2b-256 | 2bc07c5b2e662049e789f261f018574a7f2ecf64aef83f756767be9fa404b74e |