python讀取文件最后一行兩種方式
1)常規方法:從前往后依次讀取
步驟:open打開文件。
讀取文件,把文件所有行讀入內存。
遍歷所有行,提取指定行的數據。
優點:簡單,方便
缺點:當文件大了以后時間太慢,無法忍受
2)推薦方法:
步驟:open打開日志文件。
移動文件讀取指針到文件末尾。
從后往前移動指針直到合適的位置。
讀取文件,提取指定行的數據。
優點:時間相對固定,適合處理大文件
代碼實現
fname = 'test.html'
with open(fname, 'r', encoding='utf-8') as f: # 打開文件
lines = f.readlines() # 讀取所有行
first_line = lines[0] # 取第一行
last_line = lines[-1] # 取最后一行
print('文件' + fname + '第一行為:'+ first_line)
print('文件' + fname + '最后一行為:' + last_line)
with open(fname, 'rb') as f: # 打開文件
# 在文本文件中,沒有使用b模式選項打開的文件,只允許從文件頭開始,只能seek(offset,0)
first_line = f.readline() # 取第一行
offset = -50 # 設置偏移量
while True:
"""
file.seek(off, whence=0):從文件中移動off個操作標記(文件指針),正往結束方向移動,負往開始方向移動。
如果設定了whence參數,就以whence設定的起始位為准,0代表從頭開始,1代表當前位置,2代表文件最末尾位置。
"""
f.seek(offset, 2) # seek(offset, 2)表示文件指針:從文件末尾(2)開始向前50個字符(-50)
lines = f.readlines() # 讀取文件指針范圍內所有行
if len(lines) >= 2: # 判斷是否最后至少有兩行,這樣保證了最后一行是完整的
last_line = lines[-1] # 取最后一行
break
# 如果off為50時得到的readlines只有一行內容,那么不能保證最后一行是完整的
# 所以off翻倍重新運行,直到readlines不止一行
offset *= 2
print('文件' + fname + '第一行為:' + first_line.decode())
print('文件' + fname + '最后一行為:' + last_line.decode())
