冷风中的一把刀 发表于 2020-5-28 19:58

初学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编码的文本文件呢?如果只是用记事本打开再另存为的话,有点太麻烦了。
希望哪位高手指点一二,十分感谢。


ligxi 发表于 2020-5-28 20:03

他应该是说,请你用gbk方式打开,因为在微软系统中ansi编码就是指gbk:
f1=open('h:/无限恐怖.txt','r',encoding='gbk')

冷风中的一把刀 发表于 2020-5-28 20:07

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

fanvalen 发表于 2020-5-28 20:10

先用GBK打开,再encode("utf-8")
统一编码了就好整

冷风中的一把刀 发表于 2020-5-28 20:12

fanvalen 发表于 2020-5-28 20:10
先用GBK打开,再encode("utf-8")
统一编码了就好整

小弟不懂,这么复杂吗?怎样操作呢?望指点

ligxi 发表于 2020-5-28 20:15

冷风中的一把刀 发表于 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编码打开。

黄河大鲤鱼 发表于 2020-5-28 20:15

import codecs #打开ANSI格式的文档,需要codecs库
txt='1.txt' #这个文档就是ANSI格式的
file = open('1.txt,'r',encoding='gb2312')as f:#codecs打开文档,encoding是gb2312,不是ANSI

fanvalen 发表于 2020-5-28 20:15

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

冷风中的一把刀 发表于 2020-5-28 20:22

ligxi 发表于 2020-5-28 20:15
方便把你的文件发上来吗?你不会是把已经转成utf-8的文件用gbk方式打开的吧?还是说把gbk的文件用utf-8打 ...

嗯,编码格式确认过了老哥。这个玩意发出来不会违规吧,

冷风中的一把刀 发表于 2020-5-28 20:23

fanvalen 发表于 2020-5-28 20:15
f = open('h:/书/人物/无限恐怖.txt','r',encoding='gbk')
i=0
p = f.read().s ...

我运行了下,还是报错。没道理{:1_909:}
页: [1] 2 3
查看完整版本: 初学python,处理ansi编码文本文件失败,望高手指点一二,谢谢!