Python 2.7:如何从文件中一次只读取几行?

ton*_*ony 2 python file

例如,我在一个文件中有2,000行,我想一次读取500行,并在读取另外500行之前对这500行做一些事情.我想知道是否有人会写一些快速的代码供我学习.谢谢!

dcr*_*sta 7

您可以使用生成器将行组合在一起,并以便于在简单的for循环中使用的方式生成它们.这可能会让你开始:

def chunks_of(iterable, chunk_size=500):
    out = []
    for item in iterable:
        out.append(item)
        if len(out) >= chunk_size:
            yield out
            out = []
    if out:
        yield out
Run Code Online (Sandbox Code Playgroud)

然后你可以使用它:

for chunk_of_lines in chunks_of(file('/path/to/file'), chunk_size=500):
    # chunk_of_lines is 500 or fewer lines from the file
Run Code Online (Sandbox Code Playgroud)

(为什么"500或更少"?因为如果文件中的行数不是500的偶数倍,则最后一个块可能不是500行.)

编辑:始终先检查文档.这是itertools文档中的一个配方

def grouper(n, iterable, fillvalue=None):
    "grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"
    args = [iter(iterable)] * n
    return izip_longest(fillvalue=fillvalue, *args)
Run Code Online (Sandbox Code Playgroud)

这会在iterable(在本例中为文件对象)上创建一个n迭代器列表- 因为它们都是同一个底层对象上的迭代器,当一个前进时,其余的都将前进 - 然后拉链它们的结果.izip_longest就像我的功能一样izip,但是用它fillvalue来填充结果,而不是简单地省略它们chunks_of.