open檔案操作之mode模式剖析

2022-07-10 23:57:10 字數 3492 閱讀 1225

python可以使用open函式來實現檔案的開啟,關閉,讀寫操作;

python3中的open函式定義為:

open(file, mode='

r', buffering=none, encoding=none, errors=none, newline=none, closefd=true)

其中mode列表為:

'r'

#open for reading (default)'w

'#open for writing, truncating the file first'x

'#create a new file and open it for writing,python3新增'a

'#'b

'#binary mode't

'#text mode (default),python3新增'+

'#open a disk file for updating (reading and writing)'u

'#universal newline mode (deprecated)

這裡我們主要關心一下'r', 'w', 'a', 'r+', 'w+', 'a+', 'x',很多人容易混淆不同模式的讀寫操作

1)'r'

唯讀模式,open函式中mode引數的預設模式,檔案不存在的話,報filenotfounderror(python2是ioerror);

檔案開啟後,初始游標位置為0;

每次讀都是從游標位置開始讀;

如果進行了寫操作,會報如下異常:

io.unsupportedoperation: not writable
2)'w'

只寫模式,檔案不存在的話,建立檔案;檔案存在的話,首先清空檔案,然後開始寫;

檔案開啟後,初始游標位置為0;

每次寫都是從游標位置開始寫;

如果進行了讀操作,首先檔案也會被清空,會報如下異常:

io.unsupportedoperation: not readable
3)『a』

追加模式,檔案不存在話,建立檔案;檔案存在的話,不會清空檔案;

檔案開啟後,初始游標位置為檔案結尾;

每次寫都是從結尾開始寫;

如果進行了讀操作,同時報如下異常:

io.unsupportedoperation: not readable
上面的比較好理解,下面就有點繞了

4)'r+'

讀寫模式,檔案不存在的話,報filenotfounderror(python2是ioerror);

檔案開啟後,初始游標位置為0;

每次讀寫都是從游標位置開始;但是對於寫操作,類似於替換操作;

看如下**:

檔案內容為:

abcdefg
**內容為:

f = open('

open_mode.txt

', 'r+'

)f.write(

'xyz')

f.close()

執行**後,檔案內容變為:

xyzdefg
5)'w+'

只寫模式,檔案不存在的話,建立檔案;檔案存在的話,首先清空檔案;

檔案開啟後,初始游標位置為0;

每次讀寫都是從游標位置開始;寫操作,類似於替換操作;

6)『a+』

追加模式,檔案不存在話,建立檔案;檔案存在的話,不會清空檔案;

檔案開啟後,初始游標位置為檔案結尾;

每次寫都是從結尾開始寫;

讀操作從游標位置開始;

7) 'x'

python3新加

建立檔案並寫操作,操作必須是不存在的檔案,如果操作的檔案已存在,則報錯fileexistserror

不可讀,如果進行了讀操作,同時報如下異常:

io.unsupportedoperation: not readable
最後畫一張**總結一下:

二進位制形式讀寫檔案;

寫資料時,寫入的資料型別必須為字串型別,其他型別必須通過json(就是符合json格式的字串)寫入

python2與python3對於'b』 mode的行為不同,這和python2與python3的字串型別有關;事實上,python的字串型別有兩種;

python2的兩種字串型別,分別叫做str和unicode,str例項包含原始的8位值;而unicode的例項,則包含unicode字元。

python2的兩種字串型別,分別叫做byte和str,與python2不同的是,byte例項包含原始的8位值;而str的例項,則包含unicode字元。

當讀寫檔案採用'b'的模式時,要求必須以二進位制形式讀寫,在python2中,字串必須為str字串,python3中必須為byte字串;所以在python3,'b'模式下這樣讀寫字串

s = b'

hello world!'#

注意是byte字串

f = open('

open_mode.txt

','wb')

f.write(s)

view code

或:

s = '

hello world!

'f = open('

open_mode.txt

','wb')

f.write(s.encode(encoding='

utf-8

'))

view code

不然會報如下錯誤:

traceback (most recent call last):

file

"c:/users/desktop/python/cnblogs/資料型別.py

", line 125, in

f.write(s)

typeerror: a bytes-like object is required, not

'str

'

view code

open的內容還有很多,針對於讀,還有個更好的模組linecache用於讀取大檔案;以後有時間繼續擴充套件

檔案操作 mode

fopen和freopen的第二個引數檔案開啟方式 mode r 唯讀 為輸入開啟乙個文字檔案 w 只寫 為輸出開啟乙個文字檔案 a 追加 向檔案檔案尾新增資料 rb 唯讀 為輸入開啟乙個二進位制檔案 wb 只寫 為輸出開啟乙個二進位制檔案 r 讀寫 為讀寫開啟乙個文字檔案 w 讀寫 為讀寫建立乙個...

open檔案操作

基本方式 r 唯讀不寫 w 只寫模式,檔案不存在則建立,檔案存在則清空 x 只寫模式,不可讀,檔案不存在可以建立,檔案存在直接報錯。a 追加 不可讀,不存在則建立,存在可在尾部追加 假如 檔名是 db 內容 123456f open db r r 唯讀 date f.read read表示把檔案內容...

open檔案操作

open 做檔案操作的就是他 1.開啟檔案 f open db r 唯讀 f open db w 只寫 它清空檔案再寫 f open db x python3新加的,這個如果檔案存在報錯,不存在可以讓你建立並寫內容。f open db a a是追加 號表示同時讀寫乙個檔案 r 可讀寫 w 可讀寫 x...