天天看點

小朋友學Python(17):檔案

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")      
更多内容請關注微信公衆号