【发布时间】:2018-07-11 08:40:57
【问题描述】:
这与In Python, is read() , or readlines() faster? 相关,但不完全相同。我有一个小文件要多次阅读。我发现用 readlines() 阅读它并加入比用 read() 阅读要快。我找不到很好的解释,但这让我很困惑。
In [34]: cat test.txt
ATOM 1 N MET A 1 -1.112 -18.674 -30.756 1.00 16.53 N
ATOM 2 CA MET A 1 0.327 -18.325 -30.772 1.00 16.53 C
ATOM 3 C MET A 1 0.513 -16.897 -31.160 1.00 16.53 C
ATOM 4 O MET A 1 -0.063 -15.998 -30.552 1.00 16.53 O
ATOM 5 CB MET A 1 1.083 -19.211 -31.777 1.00 16.53 C
ATOM 6 CG MET A 1 1.101 -20.691 -31.391 1.00 16.53 C
ATOM 7 SD MET A 1 1.989 -21.764 -32.559 1.00 16.53 S
ATOM 8 CE MET A 1 3.635 -21.109 -32.159 1.00 16.53 C
ATOM 9 N LYS A 2 1.333 -16.657 -32.199 1.00146.35 N
ATOM 10 CA LYS A 2 1.595 -15.313 -32.613 1.00146.35 C
In [35]: timeit open("test.txt").read()
10000 loops, best of 3: 58.7 µs per loop
In [36]: timeit "\n".join(open("test.txt").readlines())
10000 loops, best of 3: 56.4 µs per loop
结果非常一致。
【问题讨论】:
-
2.3 µs 的差异无关紧要。
-
为什么不把这个小文件读一遍,然后保存在内存中呢?
-
它是一个状态文件(在这个例子中它不是)。每次都必须从磁盘读取它,因为它可能被其他进程修改。
-
@LutzHorn 如果您执行一次可能无关紧要,但如果您执行数百万次,这将很重要。对我来说,这只是反直觉。我们想将代码更改为 read() 但我们认为让我们测量一下:D。
-
@guma44 您已经使用 timeit 完成了 10,000 次。您是否打算将此类文件读取数百万次?