天天看點

python輸出文本内容_使用Python檔案對象的write和writelines方法輸出檔案内容

我們經常使用電腦磁盤中存儲的圖檔、音樂、電影、doc文檔等檔案。例如使用播放器播放音樂和電影、用圖檔軟體浏覽圖檔、用Word軟體檢視或編輯doc文檔等。那麼,這些檔案是如何形成的?在Python中又如何輸出一個檔案?

檔案是如何形成的

一般來說檔案都與使用該檔案的程式相關。例如,大家比較熟悉的Word軟體,與它相關的就是擴充名為doc的檔案。打開Word文檔對内容編輯完成後,選擇儲存檔案。Word軟體會把剛編輯的内容儲存(寫入)到一個被命名的檔案中,寫入的内容不僅僅是編輯的内容,也包括Word自身的段落、頁面、字型字号等控制内容,Word會按照自己定義的資料結構(檔案格式)來組織這些内容并寫入到檔案。當Word讀取該檔案時,它會按照已定義的資料結構(檔案格式)來解析讀取的檔案内容。是以,doc文檔隻能被Word程式使用,而不能被其它程式使用,除非Word公開了doc檔案的資料結構(檔案格式)。

用Python語言編寫的程式,也可以生成和讀取Word檔案,前提是要了解Word的檔案格式。Python檔案對象提供了二種輸出檔案内容的方法,分别是write和writelines。其中write方法可以把文本資料或二進制資料塊寫入到檔案;writelines把一個字元串清單寫入到檔案。下面分别予以說明。

使用write方法寫入内容到檔案

write方法把字元串或byte類型的資料寫入到檔案。當被寫入檔案以文本模式打開時,傳入的參數應為字元串類型,當被寫入檔案以二進制模式打開時,傳入的參數應為byte類型。

writesize = fileobj.write (data);

其中data為要寫入檔案的資料,調用write方法寫入data資料到檔案後,write傳回寫入的位元組數。需要注意到是,此時data資料并沒有真正寫入到檔案,因為data資料被存儲在緩沖區中,直到調用關閉或重新整理緩沖區方法後,緩沖區的data資料才能實際寫入到檔案中。

例1:将字元串内容寫入文本檔案。

python輸出文本内容_使用Python檔案對象的write和writelines方法輸出檔案内容

案例代碼将str内容寫入到sample.txt檔案。要寫入的sample.txt檔案在磁盤中并不存在,是以需要使用w+模式打開檔案,當要打開的檔案不存在時,使用w+模式會建立該檔案。write方法寫入檔案成功後,用Python提供的print函數輸出寫入的位元組數,最後調用檔案對象的close方法關閉檔案。輸出結果如下圖所示。

python輸出文本内容_使用Python檔案對象的write和writelines方法輸出檔案内容

例2:将字元串内容寫入二進制檔案。

python輸出文本内容_使用Python檔案對象的write和writelines方法輸出檔案内容

例2的代碼和例1的代碼幾乎完全相同,不同的是檔案的打開模式為wb+,該模式為二進制模式。當使用二進制模式打開檔案時,write方法要求傳入的參數類型為byte類型,如果傳入的是字元串類型,就會發生編碼錯誤。錯誤内容如下圖所示。

python輸出文本内容_使用Python檔案對象的write和writelines方法輸出檔案内容

遇到此類問題,就需要對字元串類型的内容進行編碼後再寫入到檔案。

python輸出文本内容_使用Python檔案對象的write和writelines方法輸出檔案内容

使用Python提供bytes函數對str進行編碼,編碼格式選擇utf-8即可,也可以使用encode函數對str進行編碼。

b = str.encode('utf-8');

例3:将源檔案内容輸出到目标檔案。

python輸出文本内容_使用Python檔案對象的write和writelines方法輸出檔案内容

案例代碼聲明了二個檔案對象,一個是源檔案對象,另一個是目标檔案對象。源檔案對象使用rb模式打開檔案,使用read方法讀取檔案全部内容到content,目标檔案使用wb+模式打開檔案,使用write方法将content内容寫入到目标檔案。

使用writelines将清單内容寫入檔案

writelines可以把清單資料寫入檔案,清單資料可以作為參數傳入。

fileobj.writelines (list);

list為傳入的清單資料,不同于write方法,writelines寫入成功後并不傳回寫入的位元組數。

例4:将清單資料寫入檔案。

python輸出文本内容_使用Python檔案對象的write和writelines方法輸出檔案内容

案例代碼聲明并初始化一個list,待輸出檔案的名稱為list.txt,檔案以w+模式打開(如果list.txt不存在,則建立一個新的檔案),檔案打開成功後,調用writelines方法将list寫入到list.txt。用記事本打開list.txt檔案檢視會發現,行結束符沒有自動加入,這不是想要的輸出結果。

python輸出文本内容_使用Python檔案對象的write和writelines方法輸出檔案内容

需要在調用writelines方法之前,給list的每個成員加上換行符。

python輸出文本内容_使用Python檔案對象的write和writelines方法輸出檔案内容

用記事本打開list.txt檔案檢視會發現,行結束符已經加入。

python輸出文本内容_使用Python檔案對象的write和writelines方法輸出檔案内容