混合文件与循环
我正在写一个脚本,用来记录另一个程序的错误,并在遇到错误时从出错的地方重新启动这个程序。出于某种原因,这个程序的开发者没有把这个功能默认放进去。
总之,这个程序会读取一个输入文件,解析它,然后生成一个输出文件。输入文件有特定的格式:
UI - 26474845
TI - the title (can be any number of lines)
AB - the abstract (can also be any number of lines)
当程序出现错误时,它会提供一些参考信息,帮助你追踪错误。这些信息包括用户界面、出错的部分(标题或摘要),以及相对于标题或摘要开始的行号。我想要记录出错的句子,方法是写一个函数,输入参考信息和文件,找到出错的句子并记录下来。我想到的最好方法是从文件中向前移动特定的次数(也就是n次,其中n是相对于部分开始的行号)。我觉得这样做是合理的:
i = 1
while i <= lineNumber:
print original.readline()
i += 1
我不明白为什么这样会导致数据丢失,但Python认为会,并且提示我 ValueError: Mixing iteration and read methods would lose data
。有没有人知道该怎么正确地做这个?
4 个回答
0
假设你只需要一行,这个可能会对你有帮助。
import itertools
def getline(fobj, line_no):
"Return a (1-based) line from a file object"
return itertools.islice(fobj, line_no-1, line_no).next() # 1-based!
>>> print getline(open("/etc/passwd", "r"), 4)
'adm:x:3:4:adm:/var/adm:/bin/false\n'
你可能需要处理一下StopIteration错误(如果文件的行数少于预期的话)。
50
你遇到这个ValueError错误,可能是因为你的代码里同时有 for line in original:
和 original.readline()
。一个简单的解决办法,可以在不让程序变慢或消耗更多内存的情况下解决这个问题,就是把
for line in original:
...
改成
while True:
line = original.readline()
if not line: break
...