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

时间:2024-03-22 18:39:04

有时候我们要读取txt文档,然后以中文的形式输出返回,但是有时候txt文档的保存格式为ANSI、Unicode等,这样读取出来的文本是乱码的。

下面我们把txt文档另存为Unicode格式,

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

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

然后读取

try:
	#打开txt文档
	f = open('E:\\a file.txt','rb')
	#读取
	r = f.read()
	print(r)
	f.close()
except:
	if f:
		f.close()
		print('err')

我们可以看到“谈笑有鸿儒,往来无白丁”变成这样了!

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

这是正常的读取方法,我在网上找了很多以x开头的编码格式,还是没有找到,一开始以为是二进制的编码格式,可是二进制的编码格式为:这样的才对???

Python读取各种格式的txt文档(ANSI、Unicode、Unicode big endian、UTF-8等)咋一看差别还是挺大的

 这里有一个最麻烦的解决办法,就是把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')

然后输出结果

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

编码格式为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')

​

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

输出结果很舒服

但是问题来了

每次都要读取编码格式

然后再修改读取格式,岂不是很麻烦?

我们来看看之前的输出结果

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')

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

 

他返回的是一个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')

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

这样就变成了万能的读取文本的工具了!

接下来我们尝试读取不同编码格式的文件

首先另存为ANSI???

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

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

然后是Unicodie bing endian

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

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

完美

谢谢!