Python檔案讀寫模式與常見操作

2021-10-08 03:27:35 字數 4763 閱讀 7575

程式的執行作業系統把相關的檔案從硬碟載入到記憶體中,在記憶體中呼叫執行,當程式結束的時候,記憶體空間釋放,執行的結果得不到儲存,程式是一次性的。為了解決這個問題,我們在編碼中引入檔案的概念,通過檔案我們把上次執行的結果儲存在硬碟中。

python提供呼叫函式open()來開啟檔案,將檔案載入在記憶體中,供程式操作,操作完成後,再從記憶體寫入硬碟。

f =

open

('te.txt'

,mode=

'r+'

,encoding=

'utf-8'

)'''

第乙個引數"te.txt"一般是檔案路徑+檔名,當與python指令碼在同級目錄下時寫檔名即可。

第二個引數『mode = 』表示檔案開啟的模式。

第三個引數"encoding = "表示檔案的編譯碼方式,如果編譯碼方式不一致的話,python會報錯,

檔案寫入硬碟最終以二進位制的方式寫入,當我們寫入文字的時候,會通過encoding的編碼方式把

文字轉換為二進位製碼,也叫位元組流。

'''

(utf-8編碼格式下 預設乙個中文三個位元組 乙個英文或符號 占用乙個位元組)

read() 功能: 讀取字元的個數(裡面的引數代表字元個數)

seek() 功能: 調整指標的位置(裡面的引數代表位元組個數)

tell() 功能: 當前游標左側所有的位元組數(返回位元組數)

seek(0) 直接把游標移動到檔案開頭

seek(0,2) 直接把游標移動到檔案末尾

檔案開啟的方式常見的為三種:

r、w、a.

r,表示檔案的讀取,這種模式下對於檔案只用讀取的許可權,不能修改新增,如果呼叫write方法就會報錯。

#開啟檔案

f =open

('te.txt'

,mode=

'rt'

,encoding=

'utf-8'

)#讀取內容

data=f.read(

)print

(data)

#關閉檔案

f.close(

)執行結果:

hello,world!

#這行文字是我手動寫入的。

w,表示寫入檔案,w模式下如果檔案不存在那麼就以第乙個引數的檔名建立乙個檔案,如果那個檔案存在,那麼把檔案中的內容清空,再在本次寫入新內容。

# 1.開啟檔案

fp =

open

("te.txt"

,mode=

"w",encoding=

"utf-8"

)# 把冰箱門開啟

# 2.寫入內容

fp.write(

"把大象塞進去"

)# 把大象放進去

fp.weite(

"大象覺得有點冷"

)# 3.關閉檔案

fp.close(

)# 把冰箱門關上

通過在同一指令碼中執行這三行**,檔案te.txt的內容被改變成了:把大象塞進去

#強調:

# 1 在檔案不關閉的情況下,連續的寫入,後寫的內容一定跟在前寫內容的後面

# 2 如果重新以w模式開啟檔案,則會清空檔案內容

a,表示追加寫模式: 在檔案不存在時會建立空文件,檔案存在會將檔案指標直接移動到檔案末尾,在末尾寫入新的內容。在此模式下不能呼叫read()。以 a 模式重新開啟檔案,不會清空原檔案內容。

fp =

open

('te.txt'

,mode=

'a',encoding=

'utf-8'

)fp.write(

",大象席地而坐"

)fp.close(

)#執行結果:

把大象塞進去大象覺得有點冷,大象席地而坐

r+ w+ a+ :可讀可寫

在平時工作中,我們只單純使用r/w/a,要麼唯讀,要麼只寫,一般不用可讀可寫的模式。

a = b'1234'

print

(a ,

type

(a))

strvar =

"我愛你"

# encode 編碼 -> 變成二進位制位元組流

res = strvar.encode(

"utf-8"

)print

(res ,

type

(res)

)# decode 解碼 =>二進位制位元組流恢復成原來的字串

res2 = res.decode(

"utf-8"

)print

(res2 ,

type

(res2)

)執行結果:

b'1234'

<

class

'bytes'

>

b'\xe6\x88\x91\xe7\x88\xb1\xe4\xbd\xa0'

<

class

'bytes'

>

我愛你 <

class

'str'

>

由此出現了乙個新問題,如果我們操作的檔案不是文字的話,那麼意味著我們讀寫的時候是不用字元編碼這種形式的。

t模式(文字模式),上述我們直接寫r w a,指的就是 rt wt at。

b模式(二進位制模式):

讀寫檔案都是以bytes/二進位制為單位的

可以針對所有檔案

fp1 =

open

('changze.png'

,mode=

'rb'

)data = fp1.read(

)fp2 =

open

('majiang.png'

,mode=

'wb'

)fp2.write(data)

執行結果:

把changze.png的複製了張取名majiang.png

close 檔案關閉的意義

重新整理緩衝區 flush

當檔案關閉的時候自動重新整理緩衝區

當整個程式執行結束的時候自動重新整理緩衝區

當緩衝區寫滿了 會自動重新整理緩衝區

手動重新整理緩衝區

手動把緩衝區裡面的內容寫入檔案當中 fp.flush()

python中有一種形式來自動關閉檔案:

with

open

('te.txt'

,mode=

'r',encoding =

'utf-8'

)as fp:

fp.read(

)pass

但是如果乙個檔案在整個程式執行週期都處於開啟方式的話,比如日之檔案,用上述方法顯然是不合理的。

讀操作

f.read(num)

# 讀取所有內容,執行完該操作後,檔案指標會移動到檔案末尾,是

#乙個整形數值,表示我們一次性讀入的字元數。

f.readline(

)# 讀取一行內容,游標移動到第二行首部引數 > 當前行字元總個數 => 以當前行讀取

#引數 < 當前行字元總個數 => 以引數的大小來讀取字元的個數

預設readline 讀取一行

f.readlines(

)# 讀取每一行內容,存放於列表中,返回的結果是乙個列表。

檔案物件 fp 也是乙個 可迭代物件 在遍歷檔案物件的時候,預設一次拿一行

強調:

f.read() 與*f.readlines()*都是將內容一次性讀入內容,如果內容過大會導致記憶體溢位,若還想將內容全讀入記憶體,則必須分多次讀入。

其他函式

readable() 功能: 判斷檔案物件是否可讀

writable() 功能: 判斷檔案物件是否可寫

fp =

open

('te.txt'

,mode=

'r',encoding=

'utf-8'

)res1 = fp.readable(

)print

(res1)

res2 = fp.writable(

)print

(res2)

執行結果:

true

false

writelines()功能:將內容是字串的可迭代性資料寫入檔案中 引數:內容為字串型別的可迭代資料。

可迭代型資料(容器型別資料,range物件,迭代器)

truncate()功能: 把要擷取的字串提取出來,然後清空內容將提取的字串重新寫入檔案中 (位元組)。

fp =

open

('te.txt'

,mode=

'r+'

,encoding=

'utf-8'

)fp.truncate(10)

執行結果:

原本內容為:hello, world!

現在成為:

hello ,wor

Python讀寫檔案模式

1 r 開啟唯讀檔案,該檔案必須存在。2 r 開啟可讀寫的檔案,該檔案必須存在。3 w 開啟只寫檔案,若檔案存在則檔案長度清為0,即該檔案內容會消失。若檔案不存在則建立該檔案。4 w 開啟可讀寫檔案,若檔案存在則檔案長度清為零,即該檔案內容會消失。若檔案不存在則建立該檔案。5 a 以附加的方式開啟只...

python檔案讀寫模式解析

一 關於open 模式 w 以寫方式開啟,a 以追加模式開啟 從 eof 開始,必要時建立新檔案 r 以讀寫模式開啟 w 以讀寫模式開啟 參見 w a 以讀寫模式開啟 參見 a rb 以二進位制讀模式開啟 wb 以二進位制寫模式開啟 參見 w ab 以二進位制追加模式開啟 參見 a rb 以二進位制...

Python檔案讀寫常見用法總結

usr bin env python coding utf 8 檔案讀取三步驟 1.開啟檔案 f open file,mode r buffering none,encoding none,errors none,newline none,closefd true mode r,w,a,b,2.操作...