文本文件可存儲的數據量是非常多的。每當需要分析或修改存儲在文件中的信息時,首先就是讀取文件到記憶體中,為此可以一次性讀取文件的全部內容,也可以以每次一行的方式逐步讀取。 # 1.讀取文件 ## 1.1讀取整個文件 要讀取文件,需要一個包含幾行文本的文件。下麵首先來創建一個poems文本文件,,裡面存儲 ...
文本文件可存儲的數據量是非常多的。每當需要分析或修改存儲在文件中的信息時,首先就是讀取文件到記憶體中,為此可以一次性讀取文件的全部內容,也可以以每次一行的方式逐步讀取。
1.讀取文件
1.1讀取整個文件
要讀取文件,需要一個包含幾行文本的文件。下麵首先來創建一個poems文本文件,,裡面存儲著一首古詩。
讀取文件,其語法格式如下所示:
註意這個文本文件是utf-8編碼格式的,如果是windows預設的gbk模式,在讀取時可能存在錯誤編寫程式如下所示:
在這個程式中,with open('poems.txt') as poems_file: 這條語句做了大量的工作。
1.open函數。要以任何方式使用文件,哪怕僅僅是輸出其內容,都得先打開文件,這樣才能訪問它。
2.open函數接受一個參數,這個參數是要打開的文件的名稱。Python在當前執行的文件所在的目錄中查找指定的文件。
3.open函數返回一個表示文件的對象,Python將這個對象存儲在as後面的變數中。
4.關鍵字with再不需要訪問文件後將其關閉。在這個程式中,註意到我們調用了open函數。但沒有調用close函數。這裡可以調用open函數和close函數來打開和關閉文件。但這樣做時,如果程式存在bug,導致close語句未執行,文件將不會關閉。如果未妥善地關閉文件可能會導致數據丟失或受損。但如果在程式中過早的調用close(),那麼在我們使用文件的時候它已關閉,我們無法訪問。並非在任何情況下都能輕鬆確定關閉文件的恰當時機,但通過使用前面所示的結構,可讓Python去自行確定,我們只管打開文件,併在需要時使用它,Python會在合適的時候自動將其關閉。
5.有了poems.txt文件對象變數,我們使用read方法讀取這個文件的全部內容,並將其作為一個字元串存儲在變數poems_content中。
1.2.逐行讀取
讀取文件時,常常需要檢查其中每一行;可能要在文件中查找特定的信息或者要以某種方式修改文件中的文本。要以每次一行的方式檢查文件,可對文件對象使用for迴圈:
我們列印每一行時,發現多出來了空白行,因為在這個文件中,每行的末尾都有一個看不見的換行符,而print函數也會加上一個換行符,因此每行末尾都有兩個換行符:一個來自文本,一個來自print函數。要消除這些多餘的空白行,可以將文本的換行符刪除,或者讓print函數不輸出換行符
方法1,rstrip函數用於刪除字元串末尾的換行符,編寫程式如下所示:
方法2,print函數不輸出換行符,編寫程式如下所示:
2.結合列表
2.1創建一個包含文件各行內容的列表
使用withi關鍵字時,open函數返回的文件對象變數只在with代碼塊內可用。如果要在with代碼塊外訪問文件的內容,可在with代碼塊外使用該列表。
編寫程式如下所示:
2.2利用列表對文件的內容進行操作
我們發現上面輸出的list列表中,數據元素是帶有'\n'換行符的,我們如何刪除它,這裡也是用到rstrip函數,編寫程式如下所示:
3.寫入文件
保存數據的最簡單的方式之一是將其寫入到文件中,通過將輸出寫入文件,即便關閉包含程式輸出的終端視窗,這些輸出也依然存在。可以在程式結束運行後查看這些輸出,可與別人分享輸出文件,還可編寫程式來將這些輸出讀取到記憶體中併進行處理。
3.1寫入空文件
要將文本寫入文件,在調用open需要提供另一個實參變數,該實參變數是open函數操作文件的模式,告訴Python我們要寫入打開的文件。為明白其中的工作原理,我們來將一條簡單的消息存儲到文件中,而不是將其輸出到終端視窗。
其語法格式:
open('文件名稱',文件模式)
編寫程式如下所示:
我們打開new_file.txt查看一下
發現是我們想要的效果。
註意:
1.調用open函數時,提供了兩個實參變數,一個是文件名稱,另一個是文件模式。
實參變數值 | 文件模式 |
---|---|
'r' | 只讀模式,預設模式 |
'w' | 只寫模式 |
'r+' | 讀寫模式 |
'a' | 附加模式 |
2.如果要寫入的文件不存在,open函數將自動創建它。然而,以寫入模式打開文件時千萬要小心,因為如果指定的文件已經存在,Python將在返迴文件對象前清空該文件。
3.write是文件對象的寫入方法,作用是將一個字元串寫入文件。
4.Python只能將字元串寫入文本文件,要將數值數據存儲到文本文件中,必須先使用str函數將其轉換為字元串格式。
3.2寫入多行
write函數不會在寫入的文本末尾添加換行符,因此如果寫入多行時沒有指定換行符,文件看起來可能不是我們預想的結果:
編寫程式如下所示:
我們打開new_file.txt查看一下,
發現兩個字元串連接在一起了。
要讓每個字元串都單獨占一行,需要在write()語句中包含換行符,編寫程式如下所示:
我們打開new_file.txt查看一下
3.3附加到文件
如果要給文件添加內容,而不是覆蓋原有的內容,可以用附加模式打開文件。以附加模式打開文件時,Python不會在返迴文件對象時清空文件,而是將寫入到文件的行都添加到文件末尾。如果指定的文件不存在,Python將創建一個空文件。
編寫程式如下所示:
我們打開new_file.txt,查看一下,
我們可以發現,文件原來的內容還在,最後的兩行是我們新添加的內容。