估计文件中的行数。

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目前使用一个简单的随机样本。因为文本文件中的数据 通常随文件中的位置而变化(后面的行通常 与以后的日期相对应。)系统抽样是合适的。

<>或者,这个已经存在了,所以我不必写了吗?

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java通过Spring MVC web应用程序向客户端发送文本文件   java是否可以在运行时动态实例化DAO类?   调用VB。来自Java的net函数   java在Android中通过单击打开特定文件夹   java如何使用maven pom。xml标识非标准项目结构中的testng测试用例?   java为什么FOP在大文件上崩溃?   Architecture python+flask和spring boot+java   java Kafka工具根本没有启动Ubuntu 19.10   如何使用Eclipse运行Java USB API for Windows   java如何在Eclipse中查看J2EE预览服务器/容器的日志/控制台?   网页抓取是否可以使用Java crawler crawler4j暂停和恢复抓取?   java当我第二次按下按钮时,应用程序停止工作   带有偏移量和限制的java SQLite分页问题   java如何在OSX mavericks中将端口80转发到8080   java从泛型方法调用非泛型方法   java My代码未按预期工作。十进制输出不是它应该的样子   节点。java中的js加密(jasypt)和nodejs中的解密   java乘法表不工作数组索引超出范围   java将JDBC与Firebirdsql连接起来