1. 程式人生 > >Python3讀文件和問題解決

Python3讀文件和問題解決

\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或gbk
    
for 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讀文件和問題解決