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())