開發與維運

大文件的讀取方式 | Python從入門到精通:高階篇之四十七

查看上一節:文件的簡單讀取

讀取大文件

上節課我們講了可以使用read來讀取文件,而且使用open來打開文件的話是要考慮文件的編碼格式的,另外關於二進制文件如何打開後續再說。
read()使用的幾點注意:
1、如果直接調用read()它會將文本文件的所有內容全部都讀取出來;
2、如果要讀取的文件較大的話,會一次性將文件的內容加載到內存中,容易導致內存洩漏;所以對於較大的文件,不要直接調用read()。
那該如何讀取大文件呢?首先使用help查看一下read()的信息:

help(file_obj.read)

執行結果為:
image.png
可以看到有一個size的數據,並且大小為-1。
注意:
1、 read()可以接收一個size作為參數,該參數用來指定要讀取的字符的數量;
2、默認值為-1,它會讀取文件中的所有字符;
3、可以為size指定一個值,這樣read()會讀取指定數量的字符;
4、每一次讀取都是從上次讀取到位置開始讀取的
5、如果字符的數量小於size,則會讀取剩餘所有的
6、如果已經讀取到了文件的最後了,則會返回''空串
代碼如下:

file_name = 'demo2.txt'

try:
    with open(file_name,encoding='utf-8') as file_obj:

        # content = file_obj.read(-1)
        content = file_obj.read(6)#指定讀取6個字符
        content = file_obj.read(6)#從上次讀取到的位置開始
        print(content)
        print(len(content))
except FileNotFoundError :
    print(f'{file_name} 這個文件不存在!')

執行結果為:
image.png
如果再添加2行 content = file_obj.read(6))
執行結果為:
image.png
再添加一行就不再有字符串可以讀取了,即返回空串:
image.png

讀取大文件的方式

file_name = 'demo.txt'

try:
    with open(file_name,encoding='utf-8') as file_obj:
        # 定義一個變量,來保存文件的內容
        file_content = ''
        # 定義一個變量,來指定每次讀取的大小
        chunk = 100
        # 創建一個循環來讀取文件內容
        while True:
            # 讀取chunk大小的內容
            content = file_obj.read(chunk)

            # 檢查是否讀取到了內容
            if not content:
                # 內容讀取完畢,退出循環
                break

            # 輸出內容
            # print(content,end='')
            file_content += content

except FileNotFoundError :
    print(f'{file_name} 這個文件不存在!')

print(file_content)

執行結果為:
image.png

點擊查看配套視頻教程

獲取更多Python內容,請訂閱Python學習站官方技術圈!

Leave a Reply

Your email address will not be published. Required fields are marked *