python的寫操作 Python 檔案讀寫操作

2021-10-13 10:49:15 字數 3370 閱讀 3138

初識檔案操作

使用open()函式開啟乙個檔案,獲取到檔案句柄,然後通過檔案句柄就可以進行各種各樣的操作了,根據開啟檔案的方式不同能夠執行的操作也會有相應的差異。

開啟檔案的方式: r, w, a, r+, w+, a+, rb, wb, ab, r+b, w+b, a+b 預設使用的是r(唯讀)模式。

唯讀操作(r, rb)、只寫模式(w, wb)、追加(a, ab)、讀寫模式(r+, r+b)、寫讀模式(w+, w+b)、追加讀(a+)。

當我們寫檔案時,作業系統往往不會立刻把資料寫入磁碟,而是放到記憶體快取起來,空閒的時候再慢慢寫入。只有呼叫close()方法時,作業系統才保證把沒有寫入的資料全部寫入磁碟。忘記呼叫close()的後果是資料可能只寫了一部分到磁碟,剩下的丟失了。

模式描述

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

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

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

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

w開啟乙個檔案只用於寫入。若該檔案已存在則將其覆蓋。若該檔案不存在,建立新檔案。

wb以二進位制格式開啟乙個檔案用於只寫。若該檔案已存在則將其覆蓋。若該檔案不存在,建立新檔案。

w+開啟乙個檔案用於讀寫。若該檔案已存在則將其覆蓋。若該檔案不存在,建立新檔案。

w+b以二進位制格式開啟乙個檔案用於讀寫。若該檔案已存在則將其覆蓋。若該檔案不存在,建立新檔案。

a開啟乙個檔案用於追加。若該檔案已存在,檔案指標將會放在檔案的結尾。

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

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

a+b以二進位制格式開啟乙個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。

檔案內容:poem.txt

滄海月明珠有淚,

藍田日暖玉生煙。

此情可待成追憶,

只是當時已惘然。

基本讀取檔案

# 讀取檔案,檔案不存在會報錯

file = open("poem.txt", "rt")

content1 = file.read() # 把整個檔案當做乙個字串返回,會加上每行末尾的換行符。列印輸出的時候,遇到\n會自動換行。

print content1, type(content1) # 結果:滄海月明珠有淚,...只是當時已惘然。 附加:輸出有換行格式的,這裡不方便展示。

content2 = file.read(15) # 讀取n個字元。如果再次讀取,會在當前位置繼續去讀而不是從頭讀。如果使用的是rb模式. 則讀取出來的是n個位元組。

print content2, type(content2) # 結果:滄海月明珠

content3 = file.readline() # 一次讀取一行資料,每次讀取出來的資料都會有乙個\n,即換行符。可以使用strip()方法來去掉\n或者空格。

print content3, type(content3) # 結果:滄海月明珠有淚, 附加:輸出有換行格式的,這裡不方便展示。

content4 = file.readlines() # 返回乙個列表,每一行作為乙個元素.每乙個元素都包括"\n"。

print content4, type(content4) # 結果:["滄海月明珠有淚,\n", "藍田日暖玉生煙\n",...]。 附加:列表長度為4

for line in content4:

print line.strip()

for line in file: # 迴圈讀取.每次讀取一行內容.不會產生記憶體溢位的問題.推薦使用.

print line.strip()

file.close()

基本寫入檔案

# 寫入檔案,檔案不存在會建立新檔案

file = open("poem.txt", "wt")

file.write("滄海月明珠有淚,\n藍田日暖玉生煙。") # 寫入兩行詩

file.write("此情可待成追憶,".decode("utf-8").encode("utf-8"))

file.writelines(["滄海月明珠有淚,\n", "藍田日暖玉生煙。"]) # 讀取列表,寫入兩行詩

file.flush() # 重新整理. 把緩衝區的內容寫入到磁碟上.

file.close()

file物件相關的所有屬性的列表

屬性描述

file.closed

如果檔案已被關閉返回true,否則返回false。

file.mode

返回被開啟檔案的訪問模式。

file.name

返回檔案的名稱。

file.softspace

如果用print輸出後,必須跟乙個空格符,則返回false。否則返回true。

高階檔案讀寫

# with語句來自動幫我們呼叫close()方法,推薦以後用這種方式讀寫檔案。

with open("poem.txt", "rb") as fr:

fr.read()

with open("poem.txt", "wb") as fw:

fw.write('hello, world!')

字元編碼

# 要寫入特定編碼的文字檔案,需要給open()函式傳入encoding引數,將字串自動轉換成指定編碼

with open("poem.txt", "wb", encoding='gbk') as fw:

fw.write('hello, world!')

with open("poem.txt", "rb", encoding='gbk') as fr:

fr.read()

# 在文字檔案中可能夾雜了一些非法編碼的字元,可能會遇到unicodedecodeerror。open()函式還接收乙個errors引數,表示如果遇到編碼錯誤後如何處理。最簡單的方式是直接忽略。

with open("poem.txt", "rb", encoding='gbk', errors='ignore') as fr:

fr.read()

多個檔案的讀寫,可以寫成以下兩種方式

# 方式1:

with open('poem1.txt','r') as f1:

with open('poem2.txt','r') as f2:

with open('poem3.txt','r') as f3:

# 方式2

with open('poem1.txt','r') as f1:

with open('poem2.txt','r') as f2:

with open('poem3.txt','r') as f3:

python可以寫介面嗎 如何用python寫介面

如何用python寫介面?具體步驟如下 1 例項化server 2 裝飾器下面的函式變為乙個介面 3 啟動服務 開發工具和流程 python庫 flask 例項化server server flask.flask name server.route index methods post def in...

python的寫操作 python讀寫操作

1.讀寫txt 1 乙個完整的讀寫操作 1 開啟檔案 open name,mode,buffering name 檔名 mode 模式,r 讀模式,w 寫模式,a 追加模式 buffering 0無緩衝,讀寫操作直接針對硬碟 1有緩衝,使用記憶體代替硬碟,然後使用flush或close時才存進硬碟。...

python 寫xml檔案的操作

要生成的xml檔案格式如下 sample xml thing ma xiaoju springs widgets,inc.first i think widgets are greate.you should buy lots of them forom spirngy widgts,inc fro...