我正在处理一个大文件(> 500GB,几列但几行),我需要从那里获得一些行。我有我需要的部分的起始字节和结束字节(从文件的开头开始测量),如:
A,0,500
B,1089,4899
这就是事情:我必须做大约1.2 M次。哪个更适合性能:始终从文档的开头开始,还是从当前位置开始计算?所以它会是这样的:
with open(large_file, 'r') as f:
for start_byte, end_byte in byte_list:
f.seek(start_byte) # always start from beginning of file
chunk_str = f.read(end_byte-start_byte)
或
with open(large_file, 'r') as f:
current_pos = 0
for start_byte, end_byte in byte_list:
f.seek(start_byte - current_pos, 1) # seek from current position
chunk_str = f.read(end_byte-start_byte)
current_pos = end_byte
或者它甚至是否重要?我已经阅读了How does Python's seek function work?但我在技术上并不足以理解这会如何影响阅读非常大的文本文件。
答案 0 :(得分:2)
只需使用绝对形式,因为绝对字节偏移就是你所拥有的。使用seek
后,从正确位置实际读取的工作隐藏在操作系统使用的文件系统驱动程序中。 seek
本身只是设置一个变量。
如果您还不知道当前的位置,可以使用f.seek(d, 1)
,但要知道您需要跳过d
个字节。