Python 3 中文文档编码问题

在做中文文本情感分类预处理时,编码问题着实浪费我不少时间,总结如下:

1.  文件是中文,内容是酒店评论,首先是打开文件和写入新文件。

因为pickle存储默认为是二进制形式,在Python中为bytes类型,打开和写入方式需用二进制方式:

# 读取文件内容
def getContent(filename):
    with open(filename, 'rb') as f:    # 打开该中文文件的方式需二进制方式打开:rb
        contents = f.readline()
        f.close()
        return contents
result_file = open(result_path, 'wb+')   # 同样新建的储存中文的文件也要是二进制方式:wb+
result_file.write(content)

2. 对整合好的文件进行分词再存储时,同样要保证编码格式

def prepareData(sourcefile, targerfile):
    source = codecs.open(sourcefile, 'rb')
    target = codecs.open(targerfile, 'w', encoding='utf-8')
    for line in source:
        line = line.decode('gbk', 'ignore')
        line = clearTxt(line)
        seg_line = sent2word(line)
        target.writelines(seg_line + '\n')
读入时需将二进制格式decode为str类型,且因为decode的函数原型是decode([encoding], [errors='strict']),可以用第二个参数控制错误处理的策略,默认的参数就是strict,代表遇到非法字符时抛出异常; 
如果设置为ignore,则会忽略非法字符; 
如果设置为replace,则会用?取代非法字符; 

如果设置为xmlcharrefreplace,则使用XML的字符引用。

新建文件并写入时,可在新建时进行编码格式标记,这样writelines()时就可以直接写入了。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值