Python 是一種開源的動態類型和解釋型編程語言。讀寫文件是編程的一個組成部分。在 Python 中,使用 readlines() 方法讀取文件。readlines() 方法返回一個列表,其中列表中的每一項都是文件中的一個完整句子。當文件較小時,此方法很有用。由于 readlines() 方法將每一行附加到列表中,然后返回整個列表,如果文件大小非常大,比如以 GB 為單位,這將非常耗時。此外,該列表將消耗大量內存,如果沒有足夠的內存,可能會導致內存泄漏。為了避免這個問題,我們可以使用文件對象作為迭代器來迭代文件并執行所需的任務。由于迭代器只是對整個文件進行迭代,不需要任何額外的數據結構來存儲數據,因此消耗的內存相對較少。此外,迭代器不會執行像追加這樣的昂貴操作,因此它也很省時。文件在 Python 中是可迭代的,因此建議使用迭代器。
以下兩個程序演示了如何使用 Python 讀取大型文本文件。
方法一:
第一種方法使用迭代器來迭代文件。在這項技術中,我們使用 Python 中的 fileinput 模塊。fileinput 模塊的 input() 方法可用于讀取文件。使用此方法優于 readlines() 的優點是 fileinput.input() 不會將整個文件加載到內存中。因此,沒有內存泄漏的可能性。fileinput.input() 方法接受一個文件名列表,如果沒有傳遞參數,它接受來自標準輸入的輸入。該方法返回一個迭代器,該迭代器返回正在掃描的文本文件中的各個行。
# import module
import fileinput
import time
#time at the start of program is noted
start = time.time()
#keeps a track of number of lines in the file
count = 0
for lines in fileinput.input(['sample.txt']):
print(lines)
count = count + 1
#time at the end of program execution is noted
end = time.time()
#total time taken to print the file
print("Execution time in seconds: ",(end - start))
print("No. of lines printed: ",count)
解釋:
input() 方法返回一個迭代器,它掃描整個文件并打印每一行。
方法二:
第二種方法也使用迭代器來讀取文件。唯一的區別是我們將使用文件對象的迭代器。使用的方法是 open() 將整個文件包裝成一個文件對象。接下來,我們使用迭代器來獲取文件對象中的行。我們在“with”塊中打開文件,因為它會在整個塊執行后自動關閉文件。隨著 with 塊完成,exit() 方法被調用,該方法釋放所有打開的資源。
import time
start = time.time()
count = 0
with open("sample.txt") as file:
for line in file:
print(line)
count = count + 1
end = time.time()
print("Execution time in seconds: ",(end-start))
print("No of lines printed: ",count)
這種方法所需的時間相對較少。該程序也可以在沒有塊的情況下編寫,但在這種情況下,我們必須確保明確關閉文件資源。
聲明:
本站(www.rxbbx.com)部分圖文轉自網絡,刊登本文僅為傳播信息之用,絕不代表贊同其觀點或擔保其真實性。若有來源標注錯誤或侵犯了您的合法權益,請作者持權屬證明與本網聯系,我們將及時更正、刪除,謝謝