codecs模块中以utf-8编码open文件,读取时丢失信息

2013-06-23 12:13:45 +08:00
 KotiyaSanae
问题描述如标题,这里追加一点是:读取时如果混用read和readline或者read和next的话,就会出现丢失的问题。
问题重现:
讨论1
import codecs
f = codecs.open('example','r','utf-8')
print f.readline()
print f.read()
说明:example是一个至少一行的文件,建议大于5行,有必要的话,我可以提供本地的那份。
上面的代码,应该是先打印出一行,然后再打印剩下的内容---原本的想法。事实上,f.read()那部分打印不完全。

讨论2
import codecs
f = codecs.open('example','r')
print f.readline()
print f.read()
上面的代码没有译码的那个参数,然后运行没问题。

讨论三
import codecs
f = codecs.open('example','r')
print f.next()
print f.read()
这个会上抛一个异常:ValueError: Mixing iteration and read methods would lose data,我感觉能理解。

讨论四:
import codecs
f = codecs.open('example','r','utf-8')
print f.next()
print f.read()
吊诡的来了,联系讨论三,这个应该会上抛异常,但是实际上,这个行为和讨论一一模一样……
综上,我觉得codecs模块不太严谨,有些行为值得商榷,或者是我的问题?
最后,求高人指点,如何能优雅地分割一个文件,具体的,我需要前四行每行分析一次,然后剩下的文本直接合在一起。虽然readlines应该没问题,但是感觉有点不雅观,生成器不熟,没法写得很花俏,于是应该怎么做呢?
Thanks
4352 次点击
所在节点    Python
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/73309

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX