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