python 讀寫文件!!!
https://www.cnblogs.com/programer-xinmu78/p/10661170.html
python 使用open()打開文件隘弊,有幾種不同的模式共苛,r,w,a,b,等深啤。
Python引入了with語句來自動幫我們調(diào)用close()方法:
with open('/path/to/file', 'r') as f:
print(f.read())
python文件對象提供了三個"讀"方法:進(jìn)行文件的讀有三種方式荠卷,read(),readlines(),readline()
readlines()會把文檔按行讀取树埠,形成列表锐峭,末尾為換行符际邻。
這三種方法是把每行末尾的'\n'也讀進(jìn)來了绊起,它并不會默認(rèn)的把'\n'去掉盈电,需要我們手動去掉蝴簇。
In[2]: with open('test1.txt', 'r') as f1:
list1 = f1.readlines()
In[3]: list1
Out[3]: ['111\n', '222\n', '333\n', '444\n', '555\n', '666\n']
去掉'\n'
In[4]: with open('test1.txt', 'r') as f1:
list1 = f1.readlines()
for i in range(0, len(list1)):
list1[i] = list1[i].rstrip('\n')
In[5]: list1
Out[5]: ['111', '222', '333', '444', '555', '666']
關(guān)于open()的mode參數(shù):
'r':讀
'w':寫
'a':追加
'r+' == r+w(可讀可寫,文件若不存在就報錯(IOError))
'w+' == w+r(可讀可寫挣轨,文件若不存在就創(chuàng)建)
'a+' ==a+r(可追加可寫军熏,文件若不存在就創(chuàng)建)
對應(yīng)的,如果是二進(jìn)制文件卷扮,就都加一個b就好啦:
'rb' 'wb' 'ab' 'rb+' 'wb+' 'ab+'
'w'這個模式是醬紫:如果沒有這個文件荡澎,就創(chuàng)建一個均践;如果有,那么就會先把原文件的內(nèi)容清空再寫入新的東西摩幔。所以若不想清空原來的內(nèi)容而是直接在后面追加新的內(nèi)容彤委,就用'a'這個模式。
我們可以反復(fù)調(diào)用write()來寫入文件或衡,但是務(wù)必要調(diào)用f.close()來關(guān)閉文件焦影。當(dāng)我們寫文件時,操作系統(tǒng)往往不會立刻把數(shù)據(jù)寫入磁盤封断,而是放到內(nèi)存緩存起來斯辰,空閑的時候再慢慢寫入。只有調(diào)用close()方法時坡疼,操作系統(tǒng)才保證把沒有寫入的數(shù)據(jù)全部寫入磁盤彬呻。忘記調(diào)用close()的后果是數(shù)據(jù)可能只寫了一部分到磁盤,剩下的丟失了柄瑰。所以闸氮,還是用with語句來得保險:
with open('test.txt', 'w') as f:
f.write('Hello, world!')
python文件對象提供了兩個"寫"方法: write() 和 writelines()。
write()方法和read()教沾、readline()方法對應(yīng)蒲跨,是將字符串寫入到文件中。
writelines()方法和readlines()方法對應(yīng)授翻,也是針對列表的操作或悲。它接收一個字符串列表作為參數(shù),將他們寫入到文件中藏姐,換行符不會自動的加入隆箩,因此,需要顯式的加入換行符羔杨。
f1 = open('test1.txt', 'w')
f1.writelines(["1", "2", "3"])
此時test1.txt的內(nèi)容為:123
f1 = open('test1.txt', 'w')
f1.writelines(["1\n", "2\n", "3\n"])
此時test1.txt的內(nèi)容為:
1
2
3
字符編碼
要讀取非UTF-8編碼的文本文件,需要給open()函數(shù)傳入encoding參數(shù)杨蛋,例如兜材,讀取GBK編碼的文件:
f = open('test.txt', 'r', encoding='gbk')
f.read()
'測試'
遇到有些編碼不規(guī)范的文件,你可能會遇到UnicodeDecodeError逞力,因為在文本文件中可能夾雜了一些非法編碼的字符曙寡。遇到這種情況,open()函數(shù)還接收一個errors參數(shù)寇荧,表示如果遇到編碼錯誤后如何處理举庶。最簡單的方式是直接忽略:
f = open('test.txt', 'r', encoding='gbk', errors='ignore')