python seek() 从开始还是从当前位置开始?
python seek() from beginning or from current position?
我正在处理一个大文件(>500GB,几列但几行),我需要从那里获取一些行。我有我需要的部分的起始字节和结束字节列表(从文件开头开始测量),例如:
A,0,500
B,1089,4899
事情是这样的:我必须这样做大约 120 万次。哪种性能更好:始终从文档的开头开始,还是从当前位置开始计数?所以它会是这样的:
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? 但我在技术上不够熟练,无法理解这对阅读非常大的文本文件有何影响。
只需使用绝对形式,因为绝对字节偏移量就是您所拥有的。使用 seek
后从正确位置实际 读取 的工作被掩埋在您的 OS 使用的文件系统驱动程序中。 seek
本身只是设置一个变量。
如果您还不知道当前位置,但知道需要向前跳过 d
个字节,则可以使用 f.seek(d, 1)
。
我正在处理一个大文件(>500GB,几列但几行),我需要从那里获取一些行。我有我需要的部分的起始字节和结束字节列表(从文件开头开始测量),例如:
A,0,500
B,1089,4899
事情是这样的:我必须这样做大约 120 万次。哪种性能更好:始终从文档的开头开始,还是从当前位置开始计数?所以它会是这样的:
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? 但我在技术上不够熟练,无法理解这对阅读非常大的文本文件有何影响。
只需使用绝对形式,因为绝对字节偏移量就是您所拥有的。使用 seek
后从正确位置实际 读取 的工作被掩埋在您的 OS 使用的文件系统驱动程序中。 seek
本身只是设置一个变量。
如果您还不知道当前位置,但知道需要向前跳过 d
个字节,则可以使用 f.seek(d, 1)
。