python讀取文件首行和最后一行


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

  


免責聲明!

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



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