📅  最后修改于: 2023-12-03 15:19:32.331000             🧑  作者: Mango
有时候,我们需要从文件的末尾开始读取,而不是从开头开始。例如,我们可能需要读取日志文件的最后几行。Python 提供了一种方法来从文件的末尾开始读取内容,而不是从开头开始。
seek()
和 tell()
函数seek()
和 tell()
函数是 Python 中用于移动文件读写指针的两个重要函数。其中 seek()
用于移动读写指针的位置,tell()
用于获取当前读写指针的位置。
我们可以使用 tell()
函数获取文件的大小,然后再从文件末尾向前移动指定的字节数读取内容,代码如下:
with open('example.txt', 'rb') as file:
file.seek(-2, 2) # 从文件末尾向前移动 2 个字节
print(file.read())
注意:打开文件时需要以二进制模式打开,否则 seek()
函数会失效。
collections.deque()
和 fileinput.input()
函数collections.deque()
是 Python 中用于实现队列的重要类,fileinput.input()
函数用于从一个或多个文件读取输入。
我们可以使用 collections.deque()
类来存储文件的最后几行内容,然后再使用 fileinput.input()
函数从文件末尾向前读取内容,代码如下:
from collections import deque
import fileinput
# 存储文件最后 5 行内容
lines = deque(maxlen=5)
# 从文件末尾向前读取内容
for line in fileinput.input('example.txt', mode='rb')[::-1]:
lines.append(line)
if fileinput.isfirstline():
break
# 打印文件最后 5 行内容
for line in reversed(lines):
print(line.decode().strip())
注意:打开文件时需要以二进制模式打开,否则 fileinput.input()
函数会失效。
以上两种方法可以满足不同的需求,具体使用哪种方法取决于你的具体情况。