一、readlines()函數的基本用法
with open('example.txt', 'r', encoding='utf8') as f:
lines = f.readlines()
for line in lines:
print(line)
readlines()函數是Python中用於讀取文件內容的函數之一。該函數返回一個列表,列表的每個元素對應輸入文件中的一行文字。在文件讀取過程中,輸入文件會被Python自動分成若干行,在每個換行符處分割成列表的一個元素。readlines()函數經常被用於需要將整個文件內容一次性讀入內存的情況。
在上面的代碼中,首先通過with語句打開了名為example.txt的文件,並將其賦值給變數f。由於採用了with語句,所以無需再手動關閉打開的文件。然後使用f.readlines()函數一次性讀入example.txt文件的所有內容,並將其賦值給變數lines。最後使用for循環遍歷lines列表中的每個元素,也就是列印出文件的每一行內容。
二、對讀入文件內容進行處理
with open('example.txt', 'r', encoding='utf8') as f:
lines = f.readlines()
words = []
for line in lines:
words += line.strip().split(' ')
print(words)
readlines()函數返回的列表中,每個元素都是字元串形式的文本行。如果需要將文本拆成單個單詞或者每個單詞指定分隔符,可以使用Python的字元串函數split()。將每一行使用split()函數拆分後,每個單詞一定是以空格隔開的。此時,我們可以通過遍歷每一行,將每個單詞加入到一個新的列表words中。
在上面的代碼中,我們首先定義一個空列表words,然後遍歷讀入的文件內容。對於每一行,我們使用strip()函數刪除其中的空白字元,接著用split()函數將該行拆成不同的單詞,並將這些單詞加入列表words中。最後使用print()函數列印結果。
三、讀取大型文件的分塊處理技巧
from itertools import islice
with open('example.txt', 'r', encoding='utf8') as f:
while True:
lines = list(islice(f, 1000))
if not lines:
break
for line in lines:
process(line)
readlines()函數將整個文件內容一次性讀入內存。在處理小型文件時,這種方法無異,但是當文件較大時,readlines()函數會佔用大量的內存,可能導致Python程序崩潰。為此,我們可以使用Python的迭代器islice(),對大型文件進行分塊處理。
在上面的代碼中,我們導入Python自帶的迭代器模塊,並將需要處理的文件example.txt打開。之後使用Python的while True循環,每次讀取1000行,將它們存儲到一個列表lines中。如果到文件結尾了,list(islice(f, 1000))就會返回一個空列表,此時可以跳出循環。最後遍歷lines列表中的每個元素,對每一行文本進行處理。
四、逐行讀取文件內容進行實時處理
with open('example.txt', 'r', encoding='utf8') as f:
for line in f:
process(line)
如果需要對大型文件進行實時處理,則應該逐行讀取文件內容,並對每行進行處理。逐行讀取可以使用Python的for循環來完成,如上例所示。
在上面的代碼中,我們使用with語句打開example.txt文件,然後使用for循環,對於文件中的每一行,我們都調用了函數process進行處理。
五、讀取二進位文件並轉換為字元串
with open('example.jpg', 'rb') as f:
img = f.read()
imgstr = img.decode('utf8')
readlines()函數和for循環等讀取文本文件內容的方法都需要以文本模式(’r’)打開文件。如果想要讀取二進位文件,就需要使用二進位讀取模式(’rb’)打開文件。例如,要讀取圖片文件,則需要使用二進位模式打開文件,這時讀入的是圖片的二進位文件。
在上面的代碼中,我們使用with語句打開一個圖片文件example.jpg,並且使用位元組串方式(’rb’)讀取了圖片二進位內容。由於img是一個位元組串,我們需要將其轉換成字元串。為了實現這一點,可以使用Python自帶的字元編碼工具,如在decode()函數中指定utf8編碼。
六、小結
本文講解了Python中讀取文件內容的基本方法:利用readlines()函數一次性讀取整個文件內容、處理大型的文件內容分塊讀取、以及逐行讀取文件實現實時處理等。除此之外,還介紹了如何將二進位文件讀取為字元串。這些方法可以滿足不同場景中的文件讀取需求。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/271616.html