初識檔案操作
使用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...