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