在Python中,我們經常需要讀取文件的數據并進行處理。有時候,我們需要讀取文件的最后幾行數據,這時候就涉及到了讀文件尾的操作。
要讀取文件的尾部,我們可以使用seek()函數將文件指針移動到文件尾部,然后再讀取所需的行數即可。具體實現代碼如下:
def tail(file_path, num_lines):
with open(file_path, 'rb') as fp:
fp.seek(-2, 2)
end = fp.tell()
lines = 0
data = b''
while end >= 0 and lines<= num_lines:
fp.seek(end, 0)
ch = fp.read(1)
if ch == b'\n':
lines += 1
data = ch + data
end -= 1
return data.decode()
上述代碼中,我們定義了一個tail函數,該函數接收文件路徑和需要讀取的行數兩個參數。在函數內部,我們使用了with open來打開文件,并使用'rb'模式來讀取二進制數據。接著,我們使用seek()函數將文件指針移動到文件尾部,然后將文件指針往前移動兩個字節。這是因為文件尾部可能是一個換行符,我們需要將文件指針移動到換行符的前一位。然后,我們定義了三個變量:end存儲文件指針指向的位置,lines存儲已經讀取的行數,data存儲讀取到的數據。
下面是while循環的實現。我們使用end >= 0來判斷文件指針是否已經到達文件頭部,如果是,則結束循環。我們還使用lines<= num_lines來判斷是否已經讀取到了足夠的行數。如果是,則循環結束。在循環體內部,我們使用seek()函數將文件指針移動到當前位置,并讀取一個字節的數據。如果讀取到的數據是一個換行符,則將lines加1。最后,我們將讀取到的數據添加到data的前面,并將end減1,繼續向前讀取數據。
最后,我們返回讀取到的數據并使用decode()函數將二進制數據轉換成字符串。這樣,我們就實現了讀取文件尾部的功能。
在使用這個函數的時候,我們只需要傳入文件路徑和需要讀取的行數即可。下面是調用tail函數的例子:file_path = 'test.log'
num_lines = 10
data = tail(file_path, num_lines)
print(data)
上述代碼中,我們傳入了文件路徑和需要讀取的行數,然后將返回的數據打印出來。這樣,我們就可以方便地讀取文件的尾部數據了。上一篇python 數據加索引
下一篇python 數字的分解