首頁 > 軟體

Python學習之檔案的讀取詳解

2022-03-24 10:01:07

上一章節 我們學習瞭如何利用 open() 函數建立一個檔案,以及如何在檔案內寫入內容;今天我們就來了解一下如何將檔案中的內容讀取出去來的方法。

檔案讀取的模式

模式介紹
r (read 的縮寫)讀取檔案(返回的是字串型別)
rb二進位制形式讀取檔案

注意:我們接觸檔案的寫入與讀取都是使用的 字串 型別,那麼 集合、元組、列表等就不能寫入了麼?嚴格來說是不可以的,但是我們可以進行資料型別轉換轉為字串呀 。寫入的時候轉為字串型別,讀取的時候再轉為原來的資料型別即可。 嘿嘿嘿…

檔案物件的讀取方法

方法名引數介紹舉例
read將檔案內容一次性全部獨取出來,返回整個整個檔案的字串f.read()
readlines將檔案內容的每一行內容切割成列表讀取,返回檔案列表f.readlines()
readline將檔案每一行內容進行讀取,一次返回一行,返回檔案中的一行f.readline()
modeopen()函數的 mode屬性,呼叫可返回當前檔案模式f.mode()
name返回檔名稱f.name()
closed返回一個 bool 型別,呼叫 closed() 函數可以知道檔案是否關閉f.closed()

使用 read() 函數一次性讀取檔案全部內容

注意:下文演示的 Terminal 終端是在 read_test.py 檔案路徑啟動的 ipython 執行的。

這是我們讀取 事先建立好的 read_test.py 檔案的指令碼

import os.path

current_path = os.getcwd()

file = open('read_test.py', 'r')
data = file.read()
file.close()

print(data)
print('***************************')
print(type(data))

read_test.py 檔案內容如下

# coding:utf-8

import os.path


current_path = os.getcwd()

file_path = os.path.join(current_path, 'test.txt')
file_test = open(file_path, 'w+', encoding='utf-8')
file_test.write('人生苦短 我用Python')
file_test.read()
file_test.close()

Terminal終端 執行效果如下圖:

使用 readlines() 函數 讀取檔案內容

繼續上面的指令碼我們使用 readlines() 函數

file = open('read_test.py', 'r')
data = file.readlines()
file.close()

print(data)
print('***************************')
print(type(data))

Terminal 終端 執行的效果如下圖:

注意:區別於 print(data) ,直接列印 data ,顯示效果如下:

這裡我們發現每一行和空行都會有一個換行符,如果我們需要讀取、處理每一行的內容,空行與換行符會給我們造成很大的困擾。這裡我們就可以利用到字串的 strip() 函數加上 for 迴圈 就可以處理了。

_data = []

for i in data:
    temp = i.strip()
    if temp != '':
        _data.append(temp)
        
_data

# >>> 執行結果如下圖:

使用 readline() 函數 逐行讀取檔案內容

上文我們提到 readline() 函數 會針對檔案每一行內容進行讀取,一次返回一行;如果想要讀取下一行內容,就需要再一次執行 readline() 函數;下面我們來看一下 演示案例:

file = open('read_test.py', 'r')
data = file.readline()

data

# >>> 執行結果如下:
# >>> '# coding:utf-8n'

data = file.readline()

data

# >>> 執行結果如下:
# >>> 'n'

如下圖:

mode()、name()、closed() 函數演示

見下圖:

檔案讀取小實戰

還記得我們上一章節的檔案的建立於寫入裡面的實戰小案例麼?今天我們就在上一章節的實戰小案例上進行一個補充,拓展一下我們關於讀取檔案的功能(函數)

在進行 檔案讀取小實戰之前,我們先來了解一下 wiht open() 函數,如下。

with open() 函數

前文我們瞭解到,如果想要讀取一個檔案就需要先使用 open() 函數,開啟檔案並賦予其開啟的模式,最後必須要要操作 close() 函數;這就是一個完整的讀取檔案內容的一個步驟,但是這個步驟過於繁瑣不說,在檔案不存在或者沒有執行 close() 函數的情況下,還會丟擲一個IOError的錯誤,並且給出錯誤碼和詳細的資訊告訴你檔案不存在,範例如下:

每次如果都按照如上最終方案去寫的話,實在太繁瑣。Python引入了with語句來自動幫我們呼叫close()方法

重點:!!!with 的作用就是自動呼叫close()方法 !!!

# 使用方法:
with open('/path/to/file', 'r') as f:
	print(f.read())
    
# >>> 相較於單獨使用 open() 函數,是不是程式碼更佳簡潔,並且不必呼叫f.close()方法了呢?

利用with open() 函數讀取檔案的小實戰

import os


def create_package(path):
    if os.path.exists(path):
        raise Exception('%s 已經存在,不可建立' % path)
    else:
        os.mkdir(path)

    init_path = os.path.join(path, '__init__.py')
    file_init = open(init_path, 'w', encoding='utf-8')
    file_init.write('# coding:utf-8n')
    file_init.close()


class Open(object):
    def __init__(self, path, mode='w', is_return=True):     # 這裡的 is_return 定義的是換行的意思,結合下文的 message 理解
        self.path = path
        self.mode = mode
        self.is_return = is_return

    def write(self, message):
        file_test = open(self.path, mode=self.mode)
        if self.is_return:      # 如果返回 Ture 則 在 message 後,增加換行符
            message = '%sn' % message
        file_test.write(message)
        file_test.close()

    def read(self, is_strip=True):  # is_strip 用於判斷每一行結尾的換行符將其去掉

        result = []                 # 定義一個空列表,用來讀取每一行內容

        with open(self.path, mode=self.mode) as file:
            data = file.readlines() # 檔案物件讀取檔案內容一但脫離 with open() 函數,就會自動執行 close() 函數 關閉檔案

        for line in data:           # for迴圈遍歷data ,若讀取的那一行內容不為空且如果存在'n'符,去掉'n'符然後加入result列表
            if is_strip:            # is_strip 預設就是 True
                temp = line.strip()
                if temp != '':
                    result.append(temp)
            else:                   # 如果讀取的那一行不為空,加入result列表
                if line != '':
                    result.append(line)
        return result


if __name__ == '__main__':
    current_path = os.getcwd()
    open_path = os.path.join(current_path, 'test.txt')
    open_test = Open(open_path, mode='r')
    data = open_test.read()
    # data = open_test.read(is_strip=False)
    print(data)

執行結果如下:

以上就是Python學習之檔案的讀取詳解的詳細內容,更多關於Python檔案讀取的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com