如何一次从文件中读取大量行

时间:2017-02-06 21:23:46

标签: python file io

我想基于模板生成一堆文件。该模板有数千行。对于每个新文件,只有前5行不同。读取所有行的最佳方法是什么,但前一次是5,而不是逐行读取整个文件?

2 个答案:

答案 0 :(得分:3)

一种方法是创建5个第一行的列表,并在大缓冲区中读取其余行:

with open("input.txt") as f:
    first_lines = [f.readline() for _ in range(5)]
    rest_of_lines = f.read()
第一部分

或更对称:用5行创建1个小缓冲区:

first_lines = "".join([f.readline() for _ in range(5)])

作为替代方案,从纯粹的I / O角度来看,最快的是

with open("input.txt") as f:
    lines = f.read()

并使用行拆分生成器来读取5个第一行(splitlines()在内存复制方面将是灾难性的,找到实现here

答案 1 :(得分:1)

python中的文件对象非常方便它们自己的迭代器对象,因此当你调用for line in f: ...时,你会逐行获取文件。文件对象通常被称为光标,用于跟踪您从哪里读取。当您使用泛型for循环时,此光标每次都会前进到下一个换行符并返回它已读取的内容。如果你在文件结束之前中断这个循环,你可以通过另一个循环或仅调用f.read()来回读你离开的地方,以阅读文件的其余部分

with open(inputfile, 'r') as f:
    lineN = 0
    header = ""
    for line in f:
        header = header + line
        lineN += 1
        if lineN >= 4: #read first 5 lines (0 indexed)
            break
    body = f.read() #read the rest of the file