初学python,处理ansi编码文本文件失败,望高手指点一二,谢谢!
初学python,写了一段非常简单的代码,处理txt文本文件,找出关键词所在的段并显示,可运行出错。首先我尝试打开ansi编码的txt文本文件,代码如下:
f = open('h:/无限恐怖.txt','r')
i=0
p = f.readlines()
for s in p:
if '大势' in s:
i = i+1
print(i,s)
f.close()
代码运行出错:
Traceback (most recent call last):
File "E:/python实验室/查询文本文件关键字.py", line 17, in <module>
p = f.readlines()
UnicodeDecodeError: 'gbk' codec can't decode byte 0xa1 in position 2566: illegal multibyte sequence
于是我用记事本将该txt文本文件另存为utf-8编码的文件,并编写如下代码:
f = open('h:/书/人物/无限恐怖.txt','r',encoding='utf-8')
i=0
p = f.readlines()
for s in p:
if '大势' in s:
i = i+1
print(i,s)
f.close()
程序能够得到正确的结果。
我也试过用加encoding='utf-8'的方式尝试打开处理ansi编码的文件,但是失败。到底该如何解码呢?报错信息提示解码失败。
python的版本是3.8.3
我该怎样直接运行程序直接处理ansi编码的文本文件呢?如果只是用记事本打开再另存为的话,有点太麻烦了。
希望哪位高手指点一二,十分感谢。
他应该是说,请你用gbk方式打开,因为在微软系统中ansi编码就是指gbk:
f1=open('h:/无限恐怖.txt','r',encoding='gbk') ligxi 发表于 2020-5-28 20:03
他应该是说,请你用gbk方式打开,因为在微软系统中ansi编码就是指gbk:
f1=open('h:/无限恐怖.txt','r',en ...
谢谢回复:lol。但是我试了下,还是报错
Traceback (most recent call last):
File "E:\python实验室\查询文本文件关键字.py", line 17, in <module>
p = f.readlines()
UnicodeDecodeError: 'gbk' codec can't decode byte 0xa1 in position 2566: illegal multibyte sequence 先用GBK打开,再encode("utf-8")
统一编码了就好整 fanvalen 发表于 2020-5-28 20:10
先用GBK打开,再encode("utf-8")
统一编码了就好整
小弟不懂,这么复杂吗?怎样操作呢?望指点 冷风中的一把刀 发表于 2020-5-28 20:07
谢谢回复。但是我试了下,还是报错
Traceback (most recent call last):
File "E:\python实验室\ ...
方便把你的文件发上来吗?你不会是把已经转成utf-8的文件用gbk方式打开的吧?还是说把gbk的文件用utf-8打开?
两者的编码方式是完全不同的,一个中文占2位,一个中文占3位。
两者肯定是不能互相打开的。gbk的文件就一定要用gbk编码打开,utf-8编码就一定要用utf-8编码打开。 import codecs #打开ANSI格式的文档,需要codecs库
txt='1.txt' #这个文档就是ANSI格式的
file = open('1.txt,'r',encoding='gb2312')as f:#codecs打开文档,encoding是gb2312,不是ANSI f = open('h:/书/人物/无限恐怖.txt','r',encoding='gbk')
i=0
p = f.read().splitlines()
p.encode("utf-8")
for s in p:
if '大势' in s:
i = i+1
print(i,s)
f.close() ligxi 发表于 2020-5-28 20:15
方便把你的文件发上来吗?你不会是把已经转成utf-8的文件用gbk方式打开的吧?还是说把gbk的文件用utf-8打 ...
嗯,编码格式确认过了老哥。这个玩意发出来不会违规吧, fanvalen 发表于 2020-5-28 20:15
f = open('h:/书/人物/无限恐怖.txt','r',encoding='gbk')
i=0
p = f.read().s ...
我运行了下,还是报错。没道理{:1_909:}