python的写操作_Python—文件读写操作
初識(shí)文件操作
使用open()函數(shù)打開一個(gè)文件,獲取到文件句柄,然后通過文件句柄就可以進(jìn)行各種各樣的操作了,根據(jù)打開文件的方式不同能夠執(zhí)行的操作也會(huì)有相應(yīng)的差異。
打開文件的方式: r, w, a, r+, w+, a+, rb, wb, ab, r+b, w+b, a+b 默認(rèn)使用的是r(只讀)模式。
只讀操作(r, rb)、只寫模式(w, wb)、追加(a, ab)、讀寫模式(r+, r+b)、寫讀模式(w+, w+b)、追加讀(a+)。
當(dāng)我們寫文件時(shí),操作系統(tǒng)往往不會(huì)立刻把數(shù)據(jù)寫入磁盤,而是放到內(nèi)存緩存起來,空閑的時(shí)候再慢慢寫入。只有調(diào)用close()方法時(shí),操作系統(tǒng)才保證把沒有寫入的數(shù)據(jù)全部寫入磁盤。忘記調(diào)用close()的后果是數(shù)據(jù)可能只寫了一部分到磁盤,剩下的丟失了。
模式
描述
r
以只讀方式打開文件。文件的指針將會(huì)放在文件的開頭。這是默認(rèn)模式。
rb
以二進(jìn)制格式打開一個(gè)文件用于只讀。文件指針將會(huì)放在文件的開頭。這是默認(rèn)模式。
r+
打開一個(gè)文件用于讀寫。文件指針將會(huì)放在文件的開頭。
r+b
以二進(jìn)制格式打開一個(gè)文件用于讀寫。文件指針將會(huì)放在文件的開頭。
w
打開一個(gè)文件只用于寫入。若該文件已存在則將其覆蓋。若該文件不存在,創(chuàng)建新文件。
wb
以二進(jìn)制格式打開一個(gè)文件用于只寫。若該文件已存在則將其覆蓋。若該文件不存在,創(chuàng)建新文件。
w+
打開一個(gè)文件用于讀寫。若該文件已存在則將其覆蓋。若該文件不存在,創(chuàng)建新文件。
w+b
以二進(jìn)制格式打開一個(gè)文件用于讀寫。若該文件已存在則將其覆蓋。若該文件不存在,創(chuàng)建新文件。
a
打開一個(gè)文件用于追加。若該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。
ab
以二進(jìn)制格式打開一個(gè)文件用于追加。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。
a+
打開一個(gè)文件用于讀寫。若該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。文件打開時(shí)會(huì)是追加模式。
a+b
以二進(jìn)制格式打開一個(gè)文件用于追加。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。
文件內(nèi)容:poem.txt
滄海月明珠有淚,
藍(lán)田日暖玉生煙。
此情可待成追憶,
只是當(dāng)時(shí)已惘然。
基本讀取文件
# 讀取文件,文件不存在會(huì)報(bào)錯(cuò)
file = open("poem.txt", "rt")
content1 = file.read() # 把整個(gè)文件當(dāng)做一個(gè)字符串返回,會(huì)加上每行末尾的換行符。打印輸出的時(shí)候,遇到\n會(huì)自動(dòng)換行。
print content1, type(content1) # 結(jié)果:滄海月明珠有淚,...只是當(dāng)時(shí)已惘然。 附加:輸出有換行格式的,這里不方便展示。
content2 = file.read(15) # 讀取n個(gè)字符。如果再次讀取,會(huì)在當(dāng)前位置繼續(xù)去讀而不是從頭讀。如果使用的是rb模式. 則讀取出來的是n個(gè)字節(jié)。
print content2, type(content2) # 結(jié)果:滄海月明珠
content3 = file.readline() # 一次讀取一行數(shù)據(jù),每次讀取出來的數(shù)據(jù)都會(huì)有一個(gè)\n,即換行符。可以使用strip()方法來去掉\n或者空格。
print content3, type(content3) # 結(jié)果:滄海月明珠有淚, 附加:輸出有換行格式的,這里不方便展示。
content4 = file.readlines() # 返回一個(gè)列表,每一行作為一個(gè)元素.每一個(gè)元素都包括"\n"。
print content4, type(content4) # 結(jié)果:["滄海月明珠有淚,\n", "藍(lán)田日暖玉生煙\n",...]。 附加:列表長(zhǎng)度為4
for line in content4:
print line.strip()
for line in file: # 循環(huán)讀取.每次讀取一行內(nèi)容.不會(huì)產(chǎn)生內(nèi)存溢出的問題.推薦使用.
print line.strip()
file.close()
基本寫入文件
# 寫入文件,文件不存在會(huì)創(chuàng)建新文件
file = open("poem.txt", "wt")
file.write("滄海月明珠有淚,\n藍(lán)田日暖玉生煙。") # 寫入兩行詩
file.write("此情可待成追憶,".decode("utf-8").encode("utf-8"))
file.writelines(["滄海月明珠有淚,\n", "藍(lán)田日暖玉生煙。"]) # 讀取列表,寫入兩行詩
file.flush() # 刷新. 把緩沖區(qū)的內(nèi)容寫入到磁盤上.
file.close()
file對(duì)象相關(guān)的所有屬性的列表
屬性
描述
file.closed
如果文件已被關(guān)閉返回true,否則返回false。
file.mode
返回被打開文件的訪問模式。
file.name
返回文件的名稱。
file.softspace
如果用print輸出后,必須跟一個(gè)空格符,則返回false。否則返回true。
高級(jí)文件讀寫
# with語句來自動(dòng)幫我們調(diào)用close()方法,推薦以后用這種方式讀寫文件。
with open("poem.txt", "rb") as fr:
fr.read()
with open("poem.txt", "wb") as fw:
fw.write('Hello, world!')
字符編碼
# 要寫入特定編碼的文本文件,需要給open()函數(shù)傳入encoding參數(shù),將字符串自動(dòng)轉(zhuǎn)換成指定編碼
with open("poem.txt", "wb", encoding='gbk') as fw:
fw.write('Hello, world!')
# 要讀取非UTF-8編碼的文本文件,需要給open()函數(shù)傳入encoding參數(shù),例如,讀取GBK編碼的文件:
with open("poem.txt", "rb", encoding='gbk') as fr:
fr.read()
# 在文本文件中可能夾雜了一些非法編碼的字符,可能會(huì)遇到UnicodeDecodeError。open()函數(shù)還接收一個(gè)errors參數(shù),表示如果遇到編碼錯(cuò)誤后如何處理。最簡(jiǎn)單的方式是直接忽略。
with open("poem.txt", "rb", encoding='gbk', errors='ignore') as fr:
fr.read()
多個(gè)文件的讀寫,可以寫成以下兩種方式
# 方式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:
總結(jié)
以上是生活随笔為你收集整理的python的写操作_Python—文件读写操作的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Nginx无法启动 遇见unkno
- 下一篇: python数据分析项目实战—————链