Python3讀文件和問題解決
阿新 • • 發佈:2018-09-21
\n 解決 com eof XML new 結果 分享圖片 同一時間
文件是存儲在硬盤上的,程序讀文件首先就是要將文件和內存對象關聯起來,打開文件,再通過一系列操作使得對象能獲得文件的內容。
open()方法能打開文件並在內存中創建一個文件對象。
使用方法:open(磁盤文件名,打開方式)
1 def main(): 2 file = open(‘news_tensite_xml.dat‘,‘r‘) 3 for i in range(20): 4 line = file.readline() 5 print(line)
6 main()
但是這樣寫是有問題的,我們看看問題都出在哪裏。
問題1:沒有進行關閉文件的操作
文件使用完畢後必須關閉,因為文件對象會占用操作系統的資源,並且操作系統同一時間能打開的文件數量也是有限的。
1 def main(): 2 file = open(‘news_tensite_xml.dat‘,‘r‘) 3 for i in range(20): 4 line = file.readline() 5 print(line) 6 file.close() 7 main()
問題2:編碼格式報錯
錯誤的意思是Unicode的解碼(Decode)出現了錯誤(Error),以gbk編碼的方式去解碼(該字符變成Unicode),但是位置440處的字節0xfd無法通過gbk的方式解碼。
這個錯誤就是說可能要處理的字符本身不是gbk編碼,但是卻以gbk編碼去解碼 。比如,字符串本身是utf-8的,但是卻用gbk去解碼utf-8的字符串,所以結果必然會出錯。
解決方法:
1(不合適)以二進制的形式讀入,將打開方式‘r‘改為‘rb‘
這樣二進制的讀入方式會將一些不必要的換行符‘\n‘或文件結束符‘0x1A‘(EOF)當作正常字符解碼,使得後續分詞操作、詞頻統計無法進行
2 加編碼方式
在打開文本的時候,就指明編碼方式
def main(): file = open(‘news_tensite_xml.dat‘,‘r‘,encoding=‘gb18030‘) #其中gb18030可換成utf-8或gbkfor i in range(20): line = file.readline() print(line) file.close() main()
gb18030是一種編碼範圍更廣泛的編碼方式,如果有連它都無法編碼的字符,可以在語句中加上errors屬性
1 file = open(‘news_tensite_xml.dat‘,‘r‘,encoding=‘gb18030‘,errors=‘ignore‘)
更改完錯誤後輸出結果:
Python3讀文件和問題解決