python读取txt文件出现UnicodeError

先看看加上以下两种编码能否解决问题



open('test.txt','r',encoding='utf-8') as f:

如果不能,一行行读取,跳过有问题的行

with open('test.txt', 'r', encoding='utf-8') as f:
    while True:
        try:
            line = f.readline()
            print(line)
            if not line:
                break
        except Exception as e:
            # 直接跳过
            continue


如果一行行读取,也解决不,可以试下下面的办法


首先我们看看正常的读取数据过程:

with open('test.txt','r',encoding='utf-8') as f:
#很多时候由于数据量比较大,所以并不建议一次性读取,这里我们选择的是逐行一次读取数据
   for i in f:
       pass

在读取数据的过程中,有时候会因为某一行数据中有一些特殊字符而出现编码错误。

'utf-8' codec can't decode byte 0xe8 in position 10

一般想到的是通过异常处理直接跳过,但是想想try加在哪里呢?

加在for i in f这里吗?这样就算跳过了异常那不还是拿不到后面的数据吗?

for循环里面就更加不可能了,因为出错是错现在读取过程中,而不是读取之后。

如果是数据量比较小,可以直接打开文件到出错的地方将错误数据修改,或者将那条数据删除都行,但是文件太大了,此时又无法通过打开文件去修改。

其实,可以通过在读取的时候将数据以其他的方式来编码,这个时候是可以正常读取到数据的

with open('test.txt','r', encoding='ISO-8859-1') as f:
    for i in f:
      pass

注意编码之后,还需要进行还原

with open('test.txt', 'r', encoding='ISO-8859-1') as f:
    for i in tqdm(f):
        # 打印出来数据是ISO-8859-1编码
        # print(i)
        # 此处可能还是会因为数据中的特殊字符导致报错
        try:
            # 将读取出来的数据先用ISO-8859-1格式给它编码,然后通过utf-8给它解码
            x = i.encode('ISO-8859-1').decode('utf-8')
        except UnicodeError as e:
            print(e)
            # 跳过出错的数据
            x = ''

        if x == '':
            print(x)
            with open('test_new.txt', 'a', encoding='utf-8') as f:
                f.write(x)

问题解决。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值