python讀取文件最后一行兩種方法


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

 

     


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM