1)常規方法:從前往后依次讀取
步驟:open打開文件。
讀取文件,把文件所有行讀入內存。
遍歷所有行,提取指定行的數據。
優點:簡單,方便
缺點:當文件大了以后時間太慢,無法忍受
2)推薦方法:
步驟:open打開日志文件。
移動文件讀取指針到文件末尾。
從后往前移動指針直到合適的位置。
讀取文件,提取指定行的數據。
優點:時間相對固定,適合處理大文件
代碼實現:

1 fname = 'test.html' 2 with open(fname, 'r', encoding='utf-8') as f: # 打開文件 3 lines = f.readlines() # 讀取所有行 4 first_line = lines[0] # 取第一行 5 last_line = lines[-1] # 取最后一行 6 print('文件' + fname + '第一行為:'+ first_line) 7 print('文件' + fname + '最后一行為:' + last_line) 8 9 10 with open(fname, 'rb') as f: # 打開文件 11 # 在文本文件中,沒有使用b模式選項打開的文件,只允許從文件頭開始,只能seek(offset,0) 12 first_line = f.readline() # 取第一行 13 offset = -50 # 設置偏移量 14 while True: 15 """ 16 file.seek(off, whence=0):從文件中移動off個操作標記(文件指針),正往結束方向移動,負往開始方向移動。 17 如果設定了whence參數,就以whence設定的起始位為准,0代表從頭開始,1代表當前位置,2代表文件最末尾位置。 18 """ 19 f.seek(offset, 2) # seek(offset, 2)表示文件指針:從文件末尾(2)開始向前50個字符(-50) 20 lines = f.readlines() # 讀取文件指針范圍內所有行 21 if len(lines) >= 2: # 判斷是否最后至少有兩行,這樣保證了最后一行是完整的 22 last_line = lines[-1] # 取最后一行 23 break 24 # 如果off為50時得到的readlines只有一行內容,那么不能保證最后一行是完整的 25 # 所以off翻倍重新運行,直到readlines不止一行 26 offset *= 2 27 print('文件' + fname + '第一行為:' + first_line.decode()) 28 print('文件' + fname + '最后一行為:' + last_line.decode())