例如,在python中,是这样的:
with open('myfile', 'rb') as f:
f.seek(0, 2) # seek to EOF
file_size = f.tell()
f.seek(file_size - 10)
print f.read(10)
f.seek(file_size - 20)
print f.read(10)
f.seek(file_size - 30)
print f.read(10)
...
效率低于此:
with open('myfile', 'rb') as f:
f.seek(-10, 2)
print f.read(10)
f.seek(-20, 1)
print f.read(10)
f.seek(-20, 1)
print f.read(10)
...
答案 0 :(得分:3)
文件中的读取位置是由OS内核维护的简单索引;没有涉及身体的头部动作。
C代码从当前位置减去10或者你在python中计算新位置将产生很小的差异。
答案 1 :(得分:1)
请注意,由于read
移动光标位置,程序不相同!所以你要调用f.seek(-20, 1)
,除非你想要反复读取相同的10个字节。
此外,对ftell
的额外调用可能会使第一个(不知不觉)变慢。您的程序之间的另一个区别是,如果在您阅读文件时,它们的行为会略有不同。
另请注意,您可以直接向EOF寻求,如下所示:
with open('myfile', 'rb') as f:
f.seek(-10, 2) # Seek from EOF
print(f.read(10))
f.seek(-20, 1)
print(f.read(10))
f.seek(-20, 1)
print(f.read(10))