python理論9 檔案讀寫

2021-09-23 14:06:55 字數 4299 閱讀 5307

想讀寫檔案首先要學會檔案路徑的規則。

首先是關於斜槓/ 和 \的問題:

雖然有查到資料說推薦使用/,windos下是\,不過在pycharm裡實測都沒關係,甚至連個數也沒有限制,唯一要注意的是檔名要加字尾(例如txt,jpg等)否則無法識別。但是在命令提示符中windos下還是得用\。

open() 將會返回乙個 file 物件,基本語法格式如下:

open(filename, mode)
不同模式開啟檔案的完全列表:

模式描述

r以唯讀方式開啟檔案。檔案的指標將會放在檔案的開頭。這是預設模式。

rb以二進位制格式開啟乙個檔案用於唯讀。檔案指標將會放在檔案的開頭。

r+開啟乙個檔案用於讀寫。檔案指標將會放在檔案的開頭。

rb+以二進位制格式開啟乙個檔案用於讀寫。檔案指標將會放在檔案的開頭。

w開啟乙個檔案只用於寫入。如果該檔案已存在則開啟檔案,並從開頭開始編輯,即原有內容會被刪除。如果該檔案不存在,建立新檔案。

wb以二進位制格式開啟乙個檔案只用於寫入。如果該檔案已存在則開啟檔案,並從開頭開始編輯,即原有內容會被刪除。如果該檔案不存在,建立新檔案。

w+開啟乙個檔案用於讀寫。如果該檔案已存在則開啟檔案,並從開頭開始編輯,即原有內容會被刪除。如果該檔案不存在,建立新檔案。

wb+以二進位制格式開啟乙個檔案用於讀寫。如果該檔案已存在則開啟檔案,並從開頭開始編輯,即原有內容會被刪除。如果該檔案不存在,建立新檔案。

a開啟乙個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該檔案不存在,建立新檔案進行寫入。

ab以二進位制格式開啟乙個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該檔案不存在,建立新檔案進行寫入。

a+開啟乙個檔案用於讀寫。如果該檔案已存在,檔案指標將會放在檔案的結尾。檔案開啟時會是追加模式。如果該檔案不存在,建立新檔案用於讀寫。

ab+以二進位制格式開啟乙個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。如果該檔案不存在,建立新檔案用於讀寫。

思維導圖以方便理解:

a+讀++

++寫+

++++

建立+++

+覆蓋++

指標在開始++

+之指標在結尾++

舉個栗子:

f=open("d:\\backup\\桌面\\test.txt","w")

f.write("test")

f.close()

f=open("d:\\backup\\桌面\\test.txt","a")

f.write(" test test")

f.close()

以下假設變數f為檔案物件,下面的路徑各位同學請自行設定。

為了讀取乙個檔案的內容,呼叫 f.read(size), 這將讀取一定數目的資料, 然後作為字串或位元組物件返回。

size 是乙個可選的數字型別的引數。 當 size 被忽略了或者為負, 那麼該檔案的所有內容都將被讀取並且返回。

# 開啟乙個檔案

f = open("d:\\backup\\桌面\\test.txt", "r")

str = f.read()

print(str)

# 關閉開啟的檔案

f.close()

f.readline() 會從檔案中讀取單獨的一行。換行符為 『\n』。f.readline() 如果返回乙個空字串, 說明已經已經讀取到最後一行。

f = open("d:\\backup\\桌面\\test.txt", "r")

str = f.readline()

print(str)

# 關閉開啟的檔案

f.close()

f.readlines() 將返回該檔案中包含的所有行。

如果設定可選引數 sizehint, 則讀取指定長度的位元組, 並且將這些位元組按行分割。

f = open("d:\\backup\\桌面\\test.txt", "r")

str = f.readlines()

print(str)

f.close()

執行結果:

['test test test\n', '\n', '1\n', '2\n', '3\n', '4\n', '5']
另一種方式是迭代乙個檔案物件然後讀取每行:

f = open("d:\\backup\\桌面\\test.txt", "r")

for line in f:

print(line, end='')

f.close()

f.write(string) 將 string 寫入到檔案中, 然後返回寫入的字元數。

f = open("d:\\backup\\桌面\\test.txt", "w")

num = f.write( "test test\n test \n" )

print(num)

# 關閉開啟的檔案

f.close()

執行結果

17
f.tell() 返回檔案物件當前所處的位置, 它是從檔案開頭開始算起的位元組數。

如果要改變檔案當前的位置, 可以使用 f.seek(offset, from_what) 函式。

from_what 的值, 如果是 0 表示開頭, 如果是 1 表示當前位置, 2 表示檔案的結尾,例如:

seek(x,0) : 從起始位置即檔案首行首字元開始移動 x 個字元

seek(x,1) : 表示從當前位置往後移動x個字元

seek(-x,2):表示從檔案的結尾往前移動x個字元

from_what 值為預設為0,即檔案開頭。下面給出乙個完整的例子:

在寫**的時候在這裡發現乙個坑,在這裡分別用兩個**來解釋,核心是在文字檔案中,沒有使用b模式選項開啟的檔案,只允許從檔案頭開始計算相對位置,從檔案其他位置計算時就會引發異常。(b模式是二進位制格式,見前面的rb)

當沒有用b模式時,下列**會報錯。

f = open("d:\\backup\\桌面\\test.txt", "r+")

f.write('0123456789abcdef')

f.seek(-3,1)

報錯:

io.unsupportedoperation: can't do nonzero cur-relative seeks
但是用了b模式就可以了:

f = open("d:\\backup\\桌面\\test.txt", "rb+")

f.write(b'0123456789abcdef')

f.seek(-3,1)

print(f.read(1))

執行結果:

b'd'
在文字檔案中 (那些開啟檔案的模式下沒有 b 的), 只會相對於檔案起始位置進行定位(這就是剛才的坑的原因)。

當你處理完乙個檔案後, 呼叫 f.close() 來關閉檔案並釋放系統的資源,如果嘗試再呼叫該檔案,則會丟擲異常。

f = open("d:\\backup\\桌面\\test.txt", "r+")

f.write('0123456789abcdef')

f.close()

f.read()

異常:

valueerror: i/o operation on closed file.
當處理乙個檔案物件時, 使用 with 關鍵字是非常好的方式。在結束後, 它會幫你正確的關閉檔案。 你不用再多餘的寫close().

with open("d:\\backup\\桌面\\test.txt", "r+") as f:

f.write('0123456789abcdef')

f.read()

print(f.closed)

執行結果:

true

Python 4 檔案讀寫

宣告 open 路徑 模式 encoding 編碼 errors 路徑 檔案的絕對路徑或者相對路徑 要注意特殊字元的轉義 c path data.txt r c path data.txt 字串前加r,表示忽略轉義字元,模式 r 讀 w 清空寫 rw 讀寫 a 追加文字 模式 b,即為以二進位制的方...

Python3 檔案讀寫

python open 方法用於開啟乙個檔案,並返回檔案物件,在對檔案進行處理過程都需要使用到這個函式 1.讀取檔案 with open test json dumps.txt mode r encoding utf 8 as f seek 移動游標至指定位置 f.seek 0 read 讀取整個檔...

Python9 檔案操作

檔案的開啟 open 1.py r r 以唯讀開啟檔案 w 開啟檔案用於寫入 a 開啟乙個檔案追加 rb,wb,ab 以二進位制方式操作 r w a 開啟檔案可讀寫 rb wb ab 以二進位制方式開啟檔案可讀寫 close 關閉檔案操作 read 讀取檔案 內可放要讀的位元組數,如 read 1 ...