美文网首页
windows系统python3应用pycharm写入txt文件

windows系统python3应用pycharm写入txt文件

作者: 若即隨風 | 来源:发表于2017-04-25 14:54 被阅读0次

    我有很多的中文样本,在应用jieba中文分词之后,想将分词的结果写入到txt文件中,报了如下错误:UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' in position 143: illegal multibyte sequence

    于是开始了漫长的排查错误之旅:

    1、我首先查看了我要写入数据的数据类型,为str

    2、查看python3本身的编码方式,python3中包含decode和encode两种方式,其中decode是将其他字符转化为unicode中间类型,即:解码,而encode是将unicode类型转化为其他字符类型,即:编码。

    3、于是,开始了第一次尝试:将str类型编码为utf-8类型,写入到文档中,事实证明写入是没有问题的,且写入的文件是byte型数据,如下:b'\xe5\xb0\x8a........首先这个不是我们想要的中文,只是unicode类型对象,.其次,当我试图再次读取这个文件的时候,我发现这个不可以被解码,查阅资料之后,发现是如下原因:

    u ='中文'      #指定字符串类型对象

    str = u.encode('utf-8')     #以utf-8编码对u进行编码,获得bytes类型对象

    str1 = str.decode('utf-8')      #如果以utf-8的编码对str进行解码得到的结果,将无法还原原来的字符串内容

    也就是当我们对字符串进行编码之后,无法还原成原来的字符串内容,所以解码失败

    4、于是尝试先对str进行编码,查看结果:代码如下

          for j in a:

                   j=j.decode('utf-8')

                    f.write('%s'%j)

    报错:AttributeError: 'str' object has no attribute 'decode'。。

    查阅资料发现:You are trying to decode an object that is already decoded. You have astr, there is no need to decode from UTF-8 anymore.(意思就是str已经是decode之后的结果,那你还要对decode的结果在次decode,显然会报错!!)

    5、继续查阅资料,有位大神指出,是我的pycharm 的File中设置IDE Encoding和Project Encoding和window系统默认的encoding编码方式不一样,即python3默认编码和windows10系统的编码方式不一致,于是统一更改为UTF-8(但是python3不是跨平台的么?这个按理说不应该有什么影响吧,事实也证明改这里并未解决我遇到的错误)

    for  j  in a:

        f.write('%s'%j)

        f.close()

    报错:UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' in position 143: illegal multibyte sequence,百思不得其解,郁闷,,于是又开始了新一轮的查阅资料

    6、后来发现,在我打开文件时,没有指定打开文件的编码方式,我打开txt文件的源代码如下:

       f=open('E:/Work/data/data.txt','r+')

    这里,如果不指定打开方式,window系统默认会以gbk方式打开吧,于是在这里加上指定编码方式:

    f=open('E:/Work/data/data.txt','r+',encoding='utf-8')

    继续写入文件,success!!ok,困扰了这么久的问题终于解决了。

    相关文章

      网友评论

          本文标题:windows系统python3应用pycharm写入txt文件

          本文链接:https://www.haomeiwen.com/subject/atevzttx.html