首先宣告這篇學習記錄是基於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:
importchardet
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...