Python读取各种格式的txt文档(ANSI、Unicode、Unicode big endian、UTF 您所在的位置:网站首页 python如何读取中文文件 Python读取各种格式的txt文档(ANSI、Unicode、Unicode big endian、UTF

Python读取各种格式的txt文档(ANSI、Unicode、Unicode big endian、UTF

2024-02-12 15:40| 来源: 网络整理| 查看: 265

有时候我们要读取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 实验室设备网 版权所有