2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > python codecs.open使用_Python中open和codecs.open的区别

python codecs.open使用_Python中open和codecs.open的区别

时间:2020-03-16 17:19:57

相关推荐

python codecs.open使用_Python中open和codecs.open的区别

在Python 2中有unicodestring和字节串。 如果你只是使用bytestrings,你可以读/写一个用open()的文件就好了。 毕竟,string只是字节。

问题出现的时候,比方说,你有一个Unicodestring,你做了以下几点:

>>> example = u'Μου αρέσει Ελληνικά' >>> open('sample.txt', 'w').write(example) Traceback (most recent call last): File "", line 1, in UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)

所以这里显然你要么明确地编码你的Unicodestring在codecs.open -8或你使用codecs.open透明地为你做。

如果你只使用字节串,那么没有问题:

>>> example = 'Μου αρέσει Ελληνικά' >>> open('sample.txt', 'w').write(example) >>>

它比这更涉及到,因为当你使用+运算符连接unicode和bytestringstring时,你会得到一个unicodestring。 容易被那个咬伤。

此外, codecs.open不喜欢string传递非ASCII字符:

codecs.open('test', 'w', encoding='utf-8').write('Μου αρέσει') Traceback (most recent call last): File "", line 1, in File "/usr/lib/python2.7/codecs.py", line 691, in write return self.writer.write(data) File "/usr/lib/python2.7/codecs.py", line 351, in write data, consumed = self.encode(object, self.errors) UnicodeDecodeError: 'ascii' codec can't decode byte 0xce in position 0: ordinal not in range(128)

有关input/输出string的build议通常是“尽可能早地转换为unicode,尽可能早地返回字节串”。 使用codecs.open允许你很容易地做后者。

只要小心,你给它unicodestring,而不是可能有非ASCII字符的字节串。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。