这是一个创建于 4172 天前的主题,其中的信息可能已经有所发展或是发生改变。
问题描述如标题,这里追加一点是:读取时如果混用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