Python读取txt文件最后一行(大文件 + 小文件)
txt文件小
file_name = 'test.txt'
with open(file_name, 'r') as f: # 打开文件
lines = f.readlines() # 读取所有行
first_line = lines[0] # 取第一行
last_line = lines[-1] # 取最后一行
print('文件' + file_name + '第一行为:' + first_line)
print('文件' + file_name + '最后一行为:' + last_line)
当文件很大时,采用这种方法不可行,资源浪费太大,采用下面方案。
txt文件大
file_name = 'log.txt'
# 判断文件是否已有数据
if not os.path.getsize(file_name):
raise Exception('文件没有内容!')
with open(file_name, 'rb') as f: # 以二进制方式打开文件
first_line = f.readline() # 读第一行
off = -50 # 设置偏移量,偏移量不能太大,如果太大会报错
while True:
f.seek(off, 2) # seek(off, 2)表示文件指针:从文件末尾(2)开始向前50个字符(-50)
lines = f.readlines() # 读取文件指针范围内所有行
if len(lines) >= 2: # 判断是否最后至少有两行,这样保证了最后一行是完整的
last_line = lines[-1] # 取最后一行
break
# 如果off为50时得到的readlines只有一行内容,那么不能保证最后一行是完整的
# 所以off翻倍重新运行,直到readlines不止一行
off *= 2
first_line = first_line.decode('utf8')
last_line = last_line.decode('utf8')
print('文件 ' + file_name + '第一行为:' + first_line)
print('文件 ' + file_name + '最后一行为:' + last_line)