在Python中从文件读取n行(但不是全部)

3 投票
11 回答
4727 浏览
提问于 2025-04-16 07:58

如何在遍历文件时一次读取多行,而不仅仅是一行?我有一个结构清晰的文件,我想这样做:

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模块里的,所以你需要从那里导入它。

撰写回答