从文件中读取n行数据(但不是全部)的Python代码

3
如何在迭代文件时读取n行而不是只读取一行?我有一个结构良好的文件,我想做类似于这样的事情:
for line1, line2, line3 in file:
    do_something(line1)
    do_something_different(line2)
    do_something_else(line3)

但是它无法正常工作:

值错误:拆包的值太多

目前我正在这样做:

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()',这些代码使得代码混乱不堪。 有没有聪明的方法可以解决这个问题?(我真的想避免一次性读取整个文件,因为它非常大)


file 是 Python 中的可迭代对象,请参考 https://dev59.com/VHRC5IYBdhLWcg3wCMc6#434411 - undefined
11个回答

0
你知道关于行的长度/数据的格式吗?如果是这样,你可以读取前n个字节(比如80 * 3)并使用f.read(240).split("\n")[0:3]。

很不幸的是,这是一个非常庞大的类似XML的文件,其中一些值的长度可能会有所不同。 - undefined
最大的文件有多大?10K?1MB?100MB?我猜它太大了,无法一次性读取整个文件,但是即使每次只读取100K,也是非常快速和廉价的。除非你需要在一个紧密循环中重复执行这个操作一百万次。 - undefined
我现在手头的文件大小是80mb,未来可能会有更大的文件;我不想通过将整个文件加载到内存中来绕过这个问题,因为这个特定问题经常出现(至少对我来说是如此 :) )。 - undefined
你是否考虑发布这个文件的一个样本,可能需要进行清理。根据结构的不同,有一些事情你可能需要考虑。 - undefined
我只是想要一种简单的方法来一次读取几行;文件的结构在这里并不重要,我需要一个语言结构来完成这个看似基本的任务。我给出的代码(使用newline = readline())能够完成工作,但它很丑陋而冗长。我想知道有没有更符合Python风格的写法。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接