讀取和寫(xiě)入文件等操作是 Python 可以完成的最常見(jiàn)任務(wù)之一。無(wú)論是寫(xiě)入簡(jiǎn)單的文本文件,還是讀取復(fù)雜的服務(wù)器日志,甚至分析原始字節(jié)數(shù)據(jù),進(jìn)行相關(guān)的處理操作,最終所有這些情況都需要讀取或?qū)懭胛募?/span> 整套學(xué)習(xí)自學(xué)教程中應(yīng)用的數(shù)據(jù)都是《三國(guó)志》、《真·三國(guó)無(wú)雙》系列游戲中的內(nèi)容。 ![]() 文件的基本概念文件是一組用于存儲(chǔ)數(shù)據(jù)的連續(xù)字節(jié)。這些數(shù)據(jù)以特定格式組織,可以是文本文件等簡(jiǎn)單的文件,也可以是可執(zhí)行程序等復(fù)雜的文件。這些字節(jié)文件然后被翻譯成二進(jìn)制文件1,0 便于計(jì)算機(jī)進(jìn)行處理。 ![]() 文件包含三個(gè)部分:
![]() 數(shù)據(jù)表示的內(nèi)容取決于所使用的格式規(guī)范通常由擴(kuò)展名表示。例如擴(kuò)展名為.jpg最有可能符合圖形交換格式規(guī)范的文件但未必是圖片文件。 擴(kuò)展名有數(shù)百甚至數(shù)千個(gè)文件擴(kuò)展名。這里介紹 .txt 和 .csv 擴(kuò)展名。 文件路徑訪問(wèn)文件需要文件路徑,文件路徑由字符串組成。其中包括三個(gè)部分:
![]() ![]() 行尾行為可以追溯到摩爾斯電碼時(shí)代,當(dāng)時(shí)使用特定的符號(hào)來(lái)傳達(dá)傳輸?shù)慕Y(jié)束或行的結(jié)束。 Windows 使用 CR+LF 字符來(lái)表示新行,而 Unix 和較新的 Mac 版本僅使用LF字符。這些符號(hào)都是不可見(jiàn)的,但是可以操作。 # windowsHello World\r\nDynasty Warriors\r\n 字符編碼未來(lái)還會(huì)面臨的一個(gè)字符數(shù)據(jù)編碼的問(wèn)題。兩種最常見(jiàn)的編碼是ASCII和UNICODE格式。
在 Python 中打開(kāi)和關(guān)閉文件調(diào)用 open() 內(nèi)置函數(shù)來(lái)完成,其中包含一個(gè)文件路徑的文件關(guān)鍵參數(shù)。
調(diào)用 .close() 對(duì)打開(kāi)的文件進(jìn)行關(guān)閉。 file.close() 可以調(diào)用 with語(yǔ)句 在執(zhí)行打開(kāi)操作模塊后自動(dòng)進(jìn)行關(guān)閉。
讀寫(xiě)參數(shù)說(shuō)明。 ![]() 讀寫(xiě)參數(shù)組合。 ![]() 文本文件類(lèi)型文本文件是您會(huì)遇到的最常見(jiàn)的文件。 # 打開(kāi)方式舉例open('data.txt')open('data.txt', 'r')open('data.txt', 'w')type(file)<class '_io.TextIOWrapper'> 緩沖的二進(jìn)制文件類(lèi)型
原始文件類(lèi)型file = open('abc.txt', 'rb', buffering=0)type(file)<class '_io.FileIO'> 讀寫(xiě)打開(kāi)的文件讀取文件時(shí)可以調(diào)用的方法。
.read(size=-1),size字節(jié)數(shù)從文件中讀取。如果沒(méi)有傳遞或傳遞參數(shù)None,-1則讀取整個(gè)文件。 with open('data.txt', 'r') as f: print(f.read())data data datadata data datadata data data .readline(size=-1),從該行中讀取多個(gè)字符。這一直持續(xù)到行尾,然后回繞。如果沒(méi)有傳遞或傳遞參數(shù)None,-1則讀取整行(或該行的其余部分)。
.readlines(),這將從文件對(duì)象中讀取剩余的行并將它們作為列表返回。 with open('data.txt', 'r') as f: print(f.readlines())data data datadata data datadata data data 遍歷文件中的每一行.readline() 方法每次遍歷一行。
.readlines() 方法返回一個(gè)列表,其中列表中的每個(gè)元素代表文件中的一行。 with open('data.txt', 'r') as f: for line in f.readlines(): print(line, end='')data data datadata data datadata data data# 或者簡(jiǎn)化操作with open('data.txt', 'r') as f: for line in f: print(line, end='')data data datadata data datadata data data 文件的讀寫(xiě)是相對(duì)的,方法和讀取一樣。
字節(jié)操作使用字節(jié)字符串處理文件。這是通過(guò)將 'b' 字符添加到參數(shù)來(lái)完成的。 with open('data.jpg', 'rb') as f: print(f.readline())b'\x89'b'JPG'b'\r\n'b'\x1a'b'\n' |
|