我在一个文件中有一个ASCII表,我想从中读取一组特定的行(例如,行4003到4005).问题是这个文件可能非常长(例如,数千到数百万行),我想尽快做到这一点.
糟糕的解决方案:读入整个文件,然后转到这些行,
f = open('filename')
lines = f.readlines()[4003:4005]
Run Code Online (Sandbox Code Playgroud)
更好的解决方案:enumerate
在每条线路上,以便它不在内存中(la /sf/answers/145731631/)
f = open('filename')
lines = []
for i, line in enumerate(f):
if i >= 4003 and i <= 4005: lines.append(line)
if i > 4005: break # @Wooble
Run Code Online (Sandbox Code Playgroud)
最佳方案?
但这仍然需要通过每一行.是否有更好的(在速度/效率方面)访问特定线路的方法?即使我只访问文件一次(通常),我应该使用linecache吗?
使用二进制文件,在这种情况下可能更容易跳过,是一个选项---但我宁愿避免它.