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)