小楼一夜听春

导航

open还是codecs.open区别

>>> fr = open('test.txt','a')
>>> line1 = "我是一道光"
>>> fr.write(line1)

不会报错,但是有时候写入文件时会有编码不统一的问题,所以就一般都统一转换为unicode。此时用open方式打开的文件就有问题了。

>>> line2 = u'我是一道光'
>>> fr.write(line2)

Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    fr.write(line2)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-11: ordinal not in range(128)
>>>

怎么办,我们可以将上面的line2编码成str类型,但是太麻烦。我们要把得到的东西先decode为unicode再encode为str。。。

 

代替这繁琐的操作就是codecs.open,例如

>>> import codecs
>>> fw = codecs.open('test1.txt','a','utf-8')
>>> fw.write(line2)
>>>

不会报错,说明写入成功。

这种方法可以指定一个编码打开文件,使用这个方法打开的文件读取返回的将是unicode。写入时,如果参数 是unicode,则使用open()时指定的编码进行编码后写入;如果是str,则先根据源代码文件声明的字符编码,解码成unicode后再进行前述 操作。相对内置的open()来说,这个方法比较不容易在编码上出现问题。

总结一下:文件读尽量用第二种方法,一般不会出现编码的问题。

posted on 2018-04-15 22:45  小楼一夜听春  阅读(348)  评论(0编辑  收藏  举报