在Python3中,字符串默认是Unicode编码,没有'decode'属性。因此,需要将代码中的字符串编码方式改为bytes类型,例如:

s = f.read().encode('gb2312')
fix_s = s.decode('gb2312')

同样,写文件时也需要将字符串转为bytes类型:

ff.write(fix_s.encode('utf8'))

以下代码示例展示如何解决'str'对象没有'decode'属性的报错,并演示如何以正确的编码方式读写文件。

import os
import codecs

POS = os.path.join(os.getcwd(), 'pos')
NEG = os.path.join(os.getcwd(), 'neg')
FIX_POS = os.path.join(os.getcwd(), 'fix_pos')
FIX_NEG = os.path.join(os.getcwd(), 'fix_neg')

def fix_corpus(dir_s, dir_t):
    for item in os.listdir(dir_s):
        with open(os.path.join(dir_s, item), 'r') as f:
            try:
                s = f.read().encode('gb2312')  # 读取文件内容并转换为bytes类型
                fix_s = s.decode('gb2312')  # 解码为Unicode字符串
            except UnicodeDecodeError:
                try:
                    fix_s = s.decode('gbk')
                except UnicodeDecodeError:
                    fix_s = s.decode('gb2312', errors='ignore')
            with codecs.open(os.path.join(dir_t, item), 'w', encoding='utf8') as ff:
                ff.write(fix_s.encode('utf8'))  # 将字符串转换为bytes类型并写入文件

if __name__ == "__main__":
    if not os.path.isdir(FIX_POS):
        os.mkdir(FIX_POS)
    if not os.path.isdir(FIX_NEG):
        os.mkdir(FIX_NEG)
    fix_corpus(POS, FIX_POS)
    fix_corpus(NEG, FIX_NEG)

在代码中,我们首先使用encode('gb2312')将读取的字符串转换为bytes类型,然后使用decode('gb2312')解码为Unicode字符串。最后,在写入文件时,使用encode('utf8')将字符串转换为bytes类型。

通过以上方法,就可以解决Python3中字符串编码错误,并保证文件以正确的编码方式读写。

Python3中字符串编码错误:解决'str'没有'decode'属性的问题

原文地址: https://www.cveoy.top/t/topic/m5WR 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录