Python读取各种格式的txt文档(ANSI、Unicode、Unicode big endian、UTF | 您所在的位置:网站首页 › python如何读取中文文件 › Python读取各种格式的txt文档(ANSI、Unicode、Unicode big endian、UTF |
有时候我们要读取txt文档,然后以中文的形式输出返回,但是有时候txt文档的保存格式为ANSI、Unicode等,这样读取出来的文本是乱码的。 下面我们把txt文档另存为Unicode格式, 然后读取 try: #打开txt文档 f = open('E:\\a file.txt','rb') #读取 r = f.read() print(r) f.close() except: if f: f.close() print('err')我们可以看到“谈笑有鸿儒,往来无白丁”变成这样了! 这是正常的读取方法,我在网上找了很多以x开头的编码格式,还是没有找到,一开始以为是二进制的编码格式,可是二进制的编码格式为:这样的才对???
这里有一个最麻烦的解决办法,就是把txt另存为UTF-8格式,这里就不演示了 接下来我们来看看大招: chardet.detect() #必杀:读取文本编码格式 try: f = open('E:\\a file.txt','rb') #打开txt文档 r = f.read() #读取 f_charInfo = chardet.detect(r) #获取文本编码信息 print(f_charInfo) f.close() except: if f: f.close() print('err')然后输出结果 编码格式为UTF-16????? 行,我们改造一下代码,以UTF-16的格式读取不就行了嘛 try: f = open('E:\\a file.txt','rb') #打开txt文档 r = f.read() #读取 f_charInfo = chardet.detect(r) #获取文本编码信息 print(r.decode('UTF-16')) #-------------------------只修改这一句------------------- f.close() except: if f: f.close() print('err') 输出结果很舒服 但是问题来了 每次都要读取编码格式 然后再修改读取格式,岂不是很麻烦? 我们来看看之前的输出结果 try: f = open('E:\\a file.txt','rb') #打开txt文档 r = f.read() #读取 f_charInfo = chardet.detect(r) #获取文本编码信息 print(f_charInfo) print('Type:',type(f_charInfo)) f.close() except: if f: f.close() print('err')
他返回的是一个idct(字典) 那只要取出UTF-16就行了啊,类似于键值对,encoding是键,UTF-16是值,值会因为txt文档的存储格式而改变 f_charInfo['encoding'] = 'UTF-16'啊所以我们把通过key取得的value作为一个文本读取的变量就行了啊??? try: f = open('E:\\a file.txt','rb') r = f.read() #获取文本的编码方式 f_charInfo = chardet.detect(r) print(f_charInfo) #输出文本格式信息 print(f_charInfo['encoding']) #取得文本格式 print(r.decode(f_charInfo['encoding'])) #通过取得的文本格式读取txt f.close() except: if f: f.close() print('err')这样就变成了万能的读取文本的工具了! 接下来我们尝试读取不同编码格式的文件 首先另存为ANSI??? 然后是Unicodie bing endian 完美 谢谢!
|
CopyRight 2018-2019 实验室设备网 版权所有 |