環境:
python3.6
需求:
針對於打開一個文件,可以讀取到文本的編碼方式,根據默認的文件編碼方式來獲取文件,就不會出現亂碼。
針對這種需求,python中有這個方式可以很好的解決:
解決策略:
chardet是一個非常優秀的編碼識別模塊。
chardet 是python的第三方庫,需要下載和安裝。
下載地址:
官方推薦下載地址:
https://pypi.org/project/chardet/
安裝事項:
如果采用源代碼安裝方法,有可能會提示缺少setuptools這個模塊。
因此這里我們采用另外一種更為方便的安裝方法,不論你選擇哪種安裝包,將它解壓得到其中的文件夾【chardet】將這個文件夾復制到【python安裝根目錄\Lib\site-packages】下,確保這個位置可以被python引用到。
如果不能被引用到請加入環境變量。【這在windows和linux下都是適用的】
開始本文:
因使用pycharm做python的開發工作,所以使用pycharm下載安裝是個更高效的選擇!!
1.使用pycharm安裝chardet第三方庫。
左上角File->Default Settings->進入Project Interpreter【工程翻譯???什么鬼,Project Depend比較貼切吧】

2.查找chardet
注意是chardet不是charset
安裝成功
3.開始使用chardet查看文件文本內容的編碼方式
代碼:【注意,open需要指定打開模式為'b'二進制打開,並且需要'rb'或'wb'或其他組合方式,僅使用'b'模式不夠】
import chardet fileName = 'E:/2/采集數據_pswf12_180大0小35750_20181206.txt' currentFile = open(fileName,mode='rb') content = currentFile.read() print(chardet.detect(content))
查看結果:
編碼方式為utf-8的概率為99%
使用chardet判斷編碼方式后,就可以放心采用本種編碼方式去去讀取文本內容而不怕報錯或亂碼
import chardet fileName = 'E:/2/采集數據_pswf12_180大0小35750_20181206.txt' # 按照二進制只讀模式 打開文件 讀取並解析文本內容的編碼方式 currentFile = open(fileName,mode='rb') content = currentFile.read() print(chardet.detect(content)) # 按照編碼方式為 UTF-8讀取整個文本內容 currentFile = open(fileName,encoding='utf-8') content = currentFile.read() print(content) # 關閉文件 currentFile.close()
4.按行讀取,更快
import chardet fileName = 'E:/2/采集數據_pswf12_180大0小35750_20181206.txt' # 按照二進制只讀模式 打開文件 僅讀取一行 並解析文本內容的編碼方式 currentFile = open(fileName,mode='rb') content = currentFile.readline() print(chardet.detect(content)) # 按照編碼方式為 UTF-8 按行讀取 整個文本內容 currentFile = open(fileName,encoding='utf-8') line = currentFile.readline() while line: print(line) line = currentFile.readline() # 關閉文件 currentFile.close()