Python 提供了必要的函數和方法進行預設情況下的檔案基本操作。你可以用 file 對象做大部分的檔案操作。
一、打開和關閉檔案
例1
(1)建立名為test1.txt的檔案,内容為
This is a test file.
(2)在同一目錄下建立file1.py檔案,内容如下
file = open("test1.txt", "wb")
print "File name: ", file.name
print "Access mode: ", file.mode
print "Closed or not? ", file.closed
file.close()
print "Closed or not? ", file.closed
運作結果:
File name: test1.txt
Access mode: wb
Closed or not? False
Closed or not? True
說明:
(一)open 函數
你必須先用Python内置的open()函數打開一個檔案,建立一個file對象,相關的方法才可以調用它進行讀寫。
文法:
file object = open(file_name [, access_mode][, buffering])
各個參數的細節如下:
(1)file_name:file_name變量是一個包含了你要通路的檔案名稱的字元串值。
(2)access_mode:access_mode決定了打開檔案的模式:隻讀,寫入,追加等。所有可取值見如下的完全清單。這個參數是非強制的,預設檔案通路模式為隻讀(r)。下表是這些模式的總結。
模式 | 描述 |
r | 以隻讀方式打開檔案。檔案的指針将會放在檔案的開頭。這是預設模式。 |
rb | 以二進制格式打開一個檔案用于隻讀。檔案指針将會放在檔案的開頭。這是預設模式。 |
r+ | 打開一個檔案用于讀寫。檔案指針将會放在檔案的開頭。 |
rb+ | 以二進制格式打開一個檔案用于讀寫。檔案指針将會放在檔案的開頭。 |
w | 打開一個檔案隻用于寫入。如果該檔案已存在則将其覆寫。如果該檔案不存在,建立新檔案。 |
wb | 以二進制格式打開一個檔案隻用于寫入。如果該檔案已存在則将其覆寫。如果該檔案不存在,建立新檔案。 |
w+ | 打開一個檔案用于讀寫。如果該檔案已存在則将其覆寫。如果該檔案不存在,建立新檔案。 |
wb+ | 以二進制格式打開一個檔案用于讀寫。如果該檔案已存在則将其覆寫。如果該檔案不存在,建立新檔案。 |
a | 打開一個檔案用于追加。如果該檔案已存在,檔案指針将會放在檔案的結尾。也就是說,新的内容将會被寫入到已有内容之後。如果該檔案不存在,建立新檔案進行寫入。 |
ab | 以二進制格式打開一個檔案用于追加。如果該檔案已存在,檔案指針将會放在檔案的結尾。也就是說,新的内容将會被寫入到已有内容之後。如果該檔案不存在,建立新檔案進行寫入。 |
a+ | 打開一個檔案用于讀寫。如果該檔案已存在,檔案指針将會放在檔案的結尾。檔案打開時會是追加模式。如果該檔案不存在,建立新檔案用于讀寫。 |
ab+ | 以二進制格式打開一個檔案用于追加。如果該檔案已存在,檔案指針将會放在檔案的結尾。如果該檔案不存在,建立新檔案用于讀寫。 |
(3)buffering: 是一個可選的參數,用來表示緩沖區的政策選擇。設定為0時,表示不使用緩沖區,直接讀寫,僅在二進制模式下有效。設定為1時,表示在文本模式下使用行緩沖區方式。設定為大于1時,表示緩沖區的設定大小。如果參數buffering沒有給出,使用預設時,會采用下面政策來選擇:
① 對于二進制檔案模式時,采用固定塊記憶體緩沖區方式,記憶體塊的大小根據系統裝置的配置設定的磁盤塊來決定,如果擷取系統磁盤塊的大小失敗,就使用内部常量io.DEFAULT_BUFFER_SIZE定義的大小。一般的作業系統上,塊的大小是4096或者8192位元組大小。
② 對于互動的文本檔案(采用isatty()判斷為True)時,采用一行緩沖區的方式。其它文本檔案使用跟二進制一樣的方式。
(二)File對象的屬性
一個檔案被打開後,你有一個file對象,你可以得到有關該檔案的各種資訊。
以下是和file對象相關的所有屬性的清單:
屬性 | 描述 |
file.closed | 傳回true如果檔案已被關閉,否則傳回false。 |
file.mode | 傳回被打開檔案的通路模式。 |
file.name | 傳回檔案的名稱。 |
(三)close()方法
close()方法方法關閉打開的檔案。關閉的檔案無法讀取或寫入更多東西。檔案已被關閉之後任何操作都會引發ValueError。但是調用close()多次是可以的。
當一個檔案對象的引用被重新指定給另一個檔案時,Python 會關閉之前的檔案。
用 close()方法關閉檔案是一個很好的習慣。
二、讀取檔案内容
例2
file = open("test1.txt", "r+")
content = file.read(10)
print content
file.close()
運作結果:
This is
read()方法
read()方法從一個打開的檔案中讀取一個字元串。需要重點注意的是,Python字元串可以是二進制資料,而不僅僅是文字。
文法:
fileObject.read([count]);
在這裡,被傳遞的參數是要從已打開檔案中讀取的位元組計數。該方法從檔案的開頭開始讀入,如果沒有傳入count,它會嘗試盡可能多地讀取更多的内容,很可能是直到檔案的末尾。
三、寫入檔案
例3
file = open("test2.txt", "wb")
file.write( "I like study Python.");
file.close()
運作結果:
生成test2.txt,并向其寫入
I
說明:
write()方法
write()方法可将任何字元串寫入一個打開的檔案。需要重點注意的是,Python字元串可以是二進制資料,而不僅僅是文字。
write()方法不會在字元串的結尾添加換行符(‘\n’):
文法:
fileObject.write(string);
在這裡,被傳遞的參數是要寫入到已打開檔案的内容。
四、檔案定位
例4
file = open("test1.txt", "r+")
content = file.read(10);
print content
position = file.tell();
print "Current positon: ", position
position = file.seek(0, 0);
content = file.read(5);
print content
position = file.tell();
print "Current positon: ", position
file.close()
運作結果:
This is a
Current position: 10
This
Current position: 5
說明:
(一)tell()方法
告訴你檔案内的目前位置;換句話說,下一次的讀寫會發生在檔案開頭這麼多位元組之後。
(二)seek(offset [,from])方法
改變目前檔案的位置。Offset變量表示要移動的位元組數。From變量指定開始移動位元組的參考位置。
如果from被設為0,這意味着将檔案的開頭作為移動位元組的參考位置。如果設為1,則使用目前的位置作為參考位置。如果它被設為2,那麼該檔案的末尾将作為參考位置。
五、重命名和删除檔案
Python的os子產品提供了幫你執行檔案處理操作的方法,比如重命名和删除檔案。
要使用這個子產品,你必須先導入它,然後才可以調用相關的各種功能。
rename()方法
rename()方法需要兩個參數,目前的檔案名和新檔案名。
文法:
os.rename(current_file_name, new_file_name)
例5
import os
os.rename( "test1.txt", "test5.txt"
remove()方法
你可以用remove()方法删除檔案,需要提供要删除的檔案名作為參數。
文法:
os.remove(file_name)
例6
import os
os.remove("test5.txt")
更多内容請關注微信公衆号