【发布时间】:2012-03-26 14:47:01
【问题描述】:
我现在有一个非常简单的脚本,它使用 enumerate() 计算文本文件中的行数:
i = 0
f = open("C:/Users/guest/Desktop/file.log", "r")
for i, line in enumerate(f):
pass
print i + 1
f.close()
浏览一个 15GB 的日志文件大约需要 3 分半钟,其中包含约 3000 万行。如果我能在两分钟或更短的时间内完成它会很棒,因为这些是每日日志,我们希望每月进行一次分析,所以代码将不得不处理 30 个约 15GB 的日志 - 可能超过一个半小时,并且我们希望最大限度地减少服务器上的时间和内存负载。
我也会满足于一个好的近似/估计方法,但它需要大约 4 sig fig 准确...
谢谢!
【问题讨论】:
-
一般来说,将文件视为二进制数据,以合理大小的块(例如,一次 4KB)读取文件并计算每个块中的
\n字符可能会更快随你去。 -
这并不比你幼稚的解决方案表现更好,但供你参考的pythonic方式来写你在这里所拥有的只是
with open(fname) as f: print sum(1 for line in f) -
aroth:感谢您的提示,我应该调查一下。 wim:太好了,谢谢,这要短得多...
-
看看rawbigcount Michael Bacon 的回答。可能对你有帮助!
标签: python enumerate line-count