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

有时候我们要读取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

完美

谢谢!

 

 

 

 

 

 

 

 

 

 

 

  • 23
    点赞
  • 73
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值