學習知識要善於思考,思考,再思(考)。我就是靠這個方法成為科學家的。——愛因斯坦

open() 方法

Python open() 方法用於打開一個文件,並返迴文件對象,在對文件進行處理過程都需要使用到這個函數,如果該文件無法被打開,會拋出 OSError。

注意:使用 open() 方法一定要保證關閉文件對象,即調用 close() 方法。

open() 函數常用形式是接收兩個參數:文件名(file)和模式(mode)。

一般用法:open(file,mode="r")

完整的語法格式:open(file, mode=r, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

參數說明:

file:必須,文件路徑(相對路徑或者絕對路徑)

mode:可選,文件的打開模式

buffering:緩衝

encoding:編碼格式,一般使用utf8

errors:報錯級別

newline:區別換行符

closefd:傳入的file參數類型

mode常用的有:

r 以只讀的方式打開文件,文件的指針將會放在文件的開頭;這是默認模式。

w 打開一個文件只用於寫入。如果該文件已存在則打開文件,並從開頭開始編輯,即原有內容會被刪除。如果該文件不存在,創建新文件。

a 打開一個文件用於追加。如果該文件已存在,文件指針將會放在文件的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該文件不存在,創建新文件進行寫入。

r+ 打開一個文件用於讀寫。文件指針將會放在文件的開頭。

w+ 打開一個文件用於讀寫。如果該文件已存在則打開文件,並從開頭開始編輯,即原有內容會被刪除。如果該文件不存在,創建新文件。

a+ 打開一個文件用於讀寫。如果該文件已存在,文件指針將會放在文件的結尾。文件打開時會是追加模式。如果該文件不存在,創建新文件用於讀寫。

還有一個b的模式,是二進位模式,或者wb rb ab如果帶有b,說明是和2進位相關。

默認為文本模式,如果要以二進位模式打開,加上 b 。

file對象

file對象使用open函數來創建,下面是file對象常用的函數

1、file.close() 關閉文件,關閉後文件不能再進行讀寫操作。

2、file.flush() 刷新文件內部緩衝,直接把內部緩衝區的數據立刻寫入文件, 而不是被動的等待輸出緩衝區寫入。

3、file.read() 從文件讀取指定的位元組數,如果未給定或為負則讀取所有。

4、file.readline() 讀取整行,包括「
字元」

5、file.readlines() 讀取所有行並返回列表,若給定sizeint>0,返回總和大約為sizeint位元組的行, 實際讀取值可能比 sizeint 較大, 因為需要填充緩衝區。

6、file.seek() 設置文件當前的位置。

7、file.tell()返迴文件的當前位置

8、file.truncate([size]) 從文件的首行首字元開始截斷,截斷文件為 size 個字元,無 size 表示從當前位置截斷;截斷之後後面的所有字元被刪除,其中 Widnows 系統下的換行代表2個字元大小。

9、file.write() 將字元串寫入文件,返回的是寫入的字元長度。

10、file.writelines() 向文件寫入一個序列字元串列表,如果需要換行則要自己加入每行的換行符。

基於字元read 和 write

最基本的對文件的操作就是在文件中讀寫數據:

現在打開一個文件以進行寫操作:

fileHandle = open ( test.txt, w )

『w是指文件將被寫入數據,語句的其它部分很好理解。下一步就是將數據寫入文件:

fileHandle.write ( This is a test file.
Really, it is. )

這個語句將「This is a test.」寫入文件的第一行,「Really, it is.」寫入文件的第二行。最後,我們需要做清理工作,並且關閉文件:

fileHandle.close()

正如你所見,在Python的面向對象機制下,這確實非常簡單。需要注意的是,當你再次使用「w」方式在文件中寫數據,所有原來的內容都會被刪除。如果想保留原來的內容,可以使用「a」方式在文件中結尾附加數據:

fileHandle = open ( test.txt, a )

fileHandle.write (

Bottom line. )

fileHandle.close()

然後我們把寫的內容讀出來:

fileHandle = open ( test.txt )

print fileHandle.read()

fileHandle.close()

基於行的讀寫 line:

fileHandle = open ( test.txt )

print fileHandle.readline() # "This is a test."

fileHandle.close()

同時,也可以把內容保存到一個list中:

fileHandle = open ( test.txt )

fileList = fileHandle.readlines()

for fileLine in fileList:

print >>, fileLine

fileHandle.close()

或者在文件中一次讀取幾個位元組的內容:

fileHandle = open ( test.txt )

print fileHandle.read ( 1 )

fileHandle.seek ( 4 )

print FileHandle.read ( 1 )

隨機訪問文件中的位置 seek

Python在讀取一個文件時,會記住其在文件中的位置,如下所示:

fileHandle = open ( test.txt )

garbage = fileHandle.readline()

fileHandle.readline() # "Really, it is."fileHandle.close()

可以看到,只有第二行顯示出來。然而,我們可以讓Python從頭開始讀來解決這個問題:

fileHandle = open ( test.txt )

garbage = fileHandle.readline()

fileHandle.seek ( 0 )

print fileHandle.readline() # "This is a test."

fileHandle.close()

在上面這個例子中,我們讓Python從文件第一個位元組開始讀取數據。所以,第一行文字顯示了出來。當然,我們也可以獲取Python在文件中的位置:

fileHandle = open ( test.txt )

print fileHandle.readline() # "This is a test."

print fileHandle.tell() # "17"

print fileHandle.readline() # "Really, it is."

二進位方式讀寫

在Windows和Macintosh環境下,有時可能需要以二進位方式讀寫文件,比如圖片和可執行文件。此時,只要在打開文件的方式參數中增加一個「b」即可:

fileHandle = open ( testBinary.txt, wb )

fileHandle.write ( There is no spoon. )

fileHandle.close()

python本身並沒有對二進位進行支持,不過提供了一個模塊來彌補,就是struct模塊。

python沒有二進位類型,但可以存儲二進位類型的數據,就是用string字元串類型來存儲二進位數據,這也沒關係,因為string是以1個位元組為單位的。

import struct

a=12.34

#將a變為二進位

bytes=struct.pack(i,a)

此時bytes就是一個string字元串,字元串按位元組同a的二進位存儲內容相同。

再進行反操作

現有二進位數據bytes,(其實就是字元串),將它反過來轉換成python的數據類型:

a,=struct.unpack(i,bytes)

注意,unpack返回的是tuple

所以如果只有一個變數的話:

bytes=struct.pack(i,a)

那麼,解碼的時候需要這樣

a,=struct.unpack(i,bytes) 或者 (a,)=struct.unpack(i,bytes)

如果直接用a=struct.unpack(i,bytes),那麼 a=(12.34,) ,是一個tuple而不是原來的浮點數了。

如果是由多個數據構成的,可以這樣:

a=hello

b=world!

c=2

d=45.123

bytes=struct.pack(5s6sif,a,b,c,d)

此時的bytes就是二進位形式的數據了,可以直接寫入文件比如 binfile.write(bytes)

然後,當我們需要時可以再讀出來,bytes=binfile.read()

再通過struct.unpack()解碼成python變數

a,b,c,d=struct.unpack(5s6sif,bytes)

5s6sif這個叫做fmt,就是格式化字元串,由數字加字元構成,5s表示佔5個字元的字元串,2i,表示2個整數等等,下面是可用的字元及類型,ctype表示可以與python中的類型一一對應。

小猿圈python入門文件操作就到這裡,有不懂的同學們,可以給小編留言哦,希望跟著python學習的步伐,堅持就是勝利哦,加油~~


推薦閱讀:
相关文章