跳转到主要内容

估算文件中的行数。

项目描述

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 (3.6 kB 查看哈希值)

上传时间

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面