利用Python從檔案中讀取字串(解決亂碼問題)

2022-03-11 17:36:45 字數 1847 閱讀 6569

首先宣告這篇學習記錄是基於python3的。

python3中,py檔案中預設的檔案編碼就是unicode,不用像python2中那樣加u,比如u'中文'。

不過在涉及路徑時,比如c:\users\administrator\desktop\studynote\python,還是要加r。

eg:r'c:\users\administrator\desktop\studynote\python'。

因為\是轉義符,想輸出'\'得寫成'\\'才可以。加了r就可以讓python自動處理字串,不讓'\'進行轉義,因此最終的字串就是c:\users\administrator\desktop\studynote\python的意思。

ok,繼續講。

首先要明確一點,你的py檔案用什麼檔案編碼不重要,都可以順利執行。不過要保證一點,儲存py檔案時的編碼必須與編碼宣告的一樣。假設你的py檔案開頭有以下編碼宣告:

eg: # -*- coding: utf-8 -*-

那麼儲存py檔案時的編碼也要為utf-8。

另外再普及一下儲存檔案編碼時的知識,用notepad++在選擇編碼模式的時候,有utf-8和utf-8 without bom,這個bom實際上是在檔案開頭加註了三個字元,用以表明本檔案的編碼方式為utf-8,但這個是不需要的,往往會導致讀取檔案的時候出錯(因為多了三個字元嘛,如果要去掉的話還得[3:]一下,挺麻煩的)。所以我們一般用utf-8 without bom.

f=open('

檔案路徑

','r')

f_read=f.read()

print(f_read)

這樣就能完整的輸出檔案裡的字串。

如果不是unicode編碼,就不能直接用了,直接讀會出現亂碼。只能先以'rb'引數讀取二進位制檔案的方式讀取進來,read之後再解碼

eg:

f=open('

檔案路徑

','rb')

f_read=f.read()

f_read_decode=f_read.decode('

該檔案的編碼方式')

print(f_read_decode)

這樣才能完整顯示,不然會有亂碼出現。

問題又來了,往往我們並不知道該檔案的編碼方式,這該怎麼辦?

幸好python有個強大的工具chardet

eg:

import

chardet

f=open('

檔案路徑

','rb')

f_read=f.read()

f_charinfo=chardet.detect(f_read)

f_charinfo的輸出是這樣的的乙個字典

前面『confidence』是置信概率,後面是推斷出的編碼方式。以上的結果,意思為推斷這段字串的編碼方式為'utf-8'的概率為99%.

經過我的測試,如果檔案裡的字串比較少的話,chardet模組是比較難判斷出正確的編碼模式的,體現在置信概率比較小,字串多的話,概率會大。我覺得至少大於90%才可信。

得到編碼方式後,就可以用來解碼了。

f_read_decode=f_read.decode(f_charinfo['encoding'])

print(f_read_decode)

從檔案中讀取字串

問題 如何從磁碟檔案中讀取字串兒,然後按行將其倒序輸出?下面一段材料取自陳壽 三國志 卷三十五諸葛亮傳,我把它分成了10段,現在要求從磁碟檔案中讀取這段文字,然後按照一定的規則倒序輸出。比如說,如果我要求輸出3行,系統會依次輸出第10 9 8三行 如果我要求輸出20行,則系統會依次輸出10 9 8 ...

Python 從檔案中讀取資料

學習python時,發現在使用with open pi digits.text as file object時,使用相對路徑,總是出現notfoundfileerror的錯誤,後來想到使用絕對路徑。書中提到的在linux環境中路徑使用的是斜槓 在windows環境中使用的是反斜槓 而經過實踐,發現只...

Python從檔案中讀取資料

編寫了乙個名為learning python.txt的檔案,內容如下 root centos7 tmp cat learning python.txt in python you can code in python you can learn object in python you can le...