在Python中从文件读取n行(但不是全部)
如何在遍历文件时一次读取多行,而不仅仅是一行?我有一个结构清晰的文件,我想这样做:
for line1, line2, line3 in file:
do_something(line1)
do_something_different(line2)
do_something_else(line3)
但这样做不行:
ValueError: 解包的值太多了
目前我在这样做:
for line in file:
do_someting(line)
newline = file.readline()
do_something_else(newline)
newline = file.readline()
do_something_different(newline)
... etc.
这样做很麻烦,因为我写了无数个'newline = file.readline()
',让代码显得很乱。有没有什么聪明的方法可以做到这一点?(我真的不想一次性读取整个文件,因为文件太大了)
11 个回答
2
itertools 是一个很有用的工具:
import itertools
def grouper(n, iterable, fillvalue=None):
"grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"
args = [iter(iterable)] * n
return itertools.izip_longest(fillvalue=fillvalue, *args)
fobj= open(yourfile, "r")
for line1, line2, line3 in grouper(3, fobj):
pass
3
既然是xml,为什么不直接用lxml呢?
6
基本上,你的file
是一个迭代器,它一次只给你一行文件内容。这就把你的问题变成了如何从一个迭代器中一次获取多个项目。解决这个问题的方法可以在这个问题中找到。需要注意的是,islice
这个函数是在itertools模块里的,所以你需要从那里导入它。