如何在Python脚本中识别文件的编码方式

       在Python的第三方库中,有一个叫chardet的库,可以用来识别文件或者网页数据的编码方式,然后再根据相应的编码方式进行解码。一般的,对于单个静态文件,我们可以通过一些编辑软件打开直接看其编码方式,但是有时候对于需要和脚本动态交互的,或者是多个文件,且其编码方式并不一定,则就需要通过在脚本中判断其编码方式,然后指定解码方式对其解码。

       利用chardet,可以用如下简单的语句判断一个文件的编码方式。这里需要注意的是,读取的模式应该为'wb'。

import chardet

f=open(r'filepath','wb')
chardet.detect(f.read())
###output {'encoding': 'UTF-8', 'confidence': 0.99}

       但是如果对于大文件,直接用read()方法,则会全部读入,这会相当耗费时间。因此对于大文件,chardet实现了逐行判断,然后积累信息,只要可以做出判断,便会停止,不再继续读入。参考如下语句。

from chardet.universaldetector import UniversalDetector

detector = UniversalDetector()
for line in f:
    detector.feed(line)
    if detector.done: break
detector.close()

print(detector.result)

       需要注意的是,就像笔者在上一篇博客中写到的,对于有些在目标文件所包含的字符上极为相近的编码方式,比如utf8和ISO-8859-1,chardet也无法做出准确的判断,甚至会判断错误。比如笔者就碰到了chardet把西欧语系的ISO-8859-1的编码方式判断为土耳其语系的Windows-1254编码方式,因此chardet也不是万能的,毕竟有时候源文件的信息给的不够,根本没法做出准确的判断。但是根据经验,一般如果utf8不行,可以试试ISO-8859-1。

你可能感兴趣的:(python编程,数据分析)