1. 文件說明
- 文件是存儲在存儲器上的數據序列,在計算機中,所有文件都是以二進制的方式進行存儲的,而文件的展示形式一般分爲兩種:文本形式和二進制形式。
1.1 文本文件
- 1.由單一特定編碼組成的文件,如
utf-8
編碼。
1.2 二進制文件
- 1.直接由比特0和1組成的文件,沒有統一字符編碼。
在二進制文件中,0和1一般根據預定義的格式進行了結構組織,這種結構也就是文件的格式,結構的不同也就代表了文件格式的不同。例如.png
,.avi
等文件。
無論是文本文件還是二進制文件,在計算機中都是以二進制方式進行存儲的,而有統一編碼的我們稱其爲文本文件,沒有統一編碼的我們稱其爲二進制文件。不過對於任何類型的文件,我們都可以用二進制的方法進行打開。
2. 文件處理的一般步驟
當我們拿到一個文件時,處理步驟一般分爲三步:
- 1.打開
- 2.操作
- 3.關閉
其中第一步打開文件是必不可少的,不打開文件是無法對其進行相關操作的(當然,如果你只是想要進行像刪除它之類的操作當我沒說),第二步操作是我們處理文件的核心,最後關閉它是爲了防止它繼續佔用我們的內存。
- 打開文件和關閉文件一般來說都只需要一行代碼:
# 以文本形式打開文件
>>> tfile = open("file.txt","rt")
# 以二進制形式打開文件
>>> bfile = open("file.txt","rb")
# 關閉文件
>>> tfile.close()
>>> bfile.close()
可以看到,在文件的兩種狀態(存儲狀態和打開狀態)之間,通過兩個函數open(,)
和close()
來進行轉換,對open
函數來講,示例中的兩個參數第一個代表文件的路徑和名稱,當省去路徑時必須保證文件和腳本在同一目錄下,第二個參數決定了你對文件打開的方式,如rt
代表以只讀的文本形式打開,rb
代表以只讀的二進制形式打開,這在後文中將會有詳細介紹。
2.1 文件的打開
如上文所講,文件的打開只需要用到open(,)
函數,下面給出這個函數的用法。
- 格式如下:
<句柄名稱> = open( 文件路徑及名稱 , 打開模式 )
句柄名稱即是後續對文件處理的對象,而文件路徑及名稱上文以及提過,而打開模式跟我們後續處理文件的方法息息相關,簡單來說我們想怎麼處理文件最好選擇相應的打開方法。Python提供了七種相關的打開模式,分別如下:
打開模式 | 作用 |
---|---|
‘r’ | 只讀 模式,程序的默認值,如果文件不存在,返回FileNotFoundError類型錯誤。 |
‘w’ | 覆蓋寫 模式,文件若不存在則自動創建一個文件,如果文件存在則將其覆蓋。 |
‘x’ | 創建寫 模式,文件若不存在則創建文件,如果文件存在將返回FileExistsError類型錯誤。 |
‘a’ | 追加寫 模式,文件若不存在則創建文件,如果文件存在則將內容寫入到原文件的後邊。 |
‘b’ | 以二進制類型打開文件。 |
‘t’ | 以文本類型打開文件,此爲默認值。 |
‘+’ | 與r/w/x/a一同使用,在原功能基礎上增加同時讀寫功能。 |
2.2 文件的關閉
文件的關閉非常簡單,格式如下:
<句柄名稱> . close()
2.3 文件內容的讀取
在對文件內容進行讀取時首先要保證文件以及被打開,而對於讀取方法,
Python提供了三個針對文件讀取的函數:
讀取方法 | 作用 |
---|---|
<句柄>.read(size=-1) | 讀入全部內容,如果給出參數,則讀入前size長度 |
<句柄>.readline(size=-1) | 讀入一行內容,如果給出參數,則讀入該行的前size長度 |
<句柄>.readlines(hint=-1) | 讀入文件的所有行,以每行爲元素形成列表,如果給出參數,則讀入前hint行 |
2.4 數據的文件寫入
對文件內容的讀取來講,我們是將文件中的內容讀取出來然後進行我們的操作,不影響原文件,而對文件內容的寫入來講,是我們之間在文件上進行操作,不過要注意對文件以寫方式
打開
Python也提供了三個針對文件寫入的函數:
寫入方法 | 作用 |
---|---|
<句柄>.write(s) | 向文件寫入一個字符串或者字節流 |
<句柄>.writelines(lines) | 將一個元素全爲字符串的列表寫入文件 |
<句柄>.seek(offset) | 改變當前文件操作指針的位置,offset 參數:0、1、2分別代表文件開頭、當前位置、文件結尾。 |
- 對於
seek
函數,它的作用是改變當前文件操作指針的位置,它的用處是什麼呢?舉個小例子:
#首先以文本狀態和覆蓋寫模式打開一個文件
>>> newfile = open('a_flie.txt','wb+')
#建立一個列表
>>> a_list = ['Keep calm',' and ','carry on',' !']
>>> newfile.writelines(a_list)
>>> for line in newfile:
print(line)
>>> newfile.close()
這段代碼在運行之後會生成一個'a_file.txt'文件,裏邊寫着'Keep calm and carry on !',
而在解釋器中卻並沒有打印這個字符串,這是因爲在文件寫入完成後,指針位置在文件的最後方,
而'for in'的遍歷方法是從指針位置向文件最後方遍歷,因此遍歷的結果是空,這個時候如果想要
使用遍歷的方法打印寫入的字符串,就需要用到'seek'函數,如下:
#首先以文本狀態和覆蓋寫模式打開一個文件
>>> newfile = open('a_flie.txt','wb+')
#建立一個列表
>>> a_list = ['Keep calm',' and ','carry on',' !']
>>> newfile.writelines(a_list)
#將文件指針轉移到文件頭部再進行遍歷
>>> newfile.seek(0)
>>> for line in newfile:
print(line)
>>> newfile.close()
#輸出結果
>>> Keep calm and carry on !
3. 總結
- 本文簡單的對文件出處理做了一些相關介紹,知識點很少,只要多練習一下就能熟練掌握,至於更高級的數據文件處理方法沒有涉及,不過不要急,要
Keep calm and carry on !
。