📜  Python向后读取文件(1)

📅  最后修改于: 2023-12-03 15:19:32.331000             🧑  作者: Mango

Python向后读取文件

有时候,我们需要从文件的末尾开始读取,而不是从开头开始。例如,我们可能需要读取日志文件的最后几行。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() 函数会失效。

以上两种方法可以满足不同的需求,具体使用哪种方法取决于你的具体情况。