一次从多个文件中读取 1 行
Reading 1 line at a time from multiple files
我有一堆文件名。我需要一次从每个文件中读取一行,进行一些处理,然后再次从每个文件中读取一行,进行一些处理等等。
我正在寻找有关如何以更 Pythonic 的方式执行此操作的建议。我知道每个文件中存在的行数,所以我现在对其进行硬编码,但我不想这样做。
更新:
这些文件都具有相同的行数。
更新 2:
至少有 30 个不同的文件。
filenames = []
line_count = 400
fileobjs = [open(i, 'r') for i in filenames]
for i in xrange(line_count):
lines = []
for each_fo in fileobjs:
for each_line in each_fo:
lines.append(each_line)
break
process(lines)
lines = [next(fo) for fo in fileobjs]
process(lines)
这将一次逐行读取两个文件
with open('File1','r') as FileA, open('File2','r') as FileB:
for lineA,lineB in zip(FileA,FileB):
print lineA,lineB
这个呢?
from itertools import izip_longest
for file_lines in izip_longest(*map(open,filenames)):
for line in file_lines:
if line:
# process line
filenames = []
files = [open(f, mode='r') for f in filenames]
for line in files[0]:
lines = [file.readline() for file in files]
process(lines)
我有一堆文件名。我需要一次从每个文件中读取一行,进行一些处理,然后再次从每个文件中读取一行,进行一些处理等等。
我正在寻找有关如何以更 Pythonic 的方式执行此操作的建议。我知道每个文件中存在的行数,所以我现在对其进行硬编码,但我不想这样做。
更新: 这些文件都具有相同的行数。
更新 2: 至少有 30 个不同的文件。
filenames = []
line_count = 400
fileobjs = [open(i, 'r') for i in filenames]
for i in xrange(line_count):
lines = []
for each_fo in fileobjs:
for each_line in each_fo:
lines.append(each_line)
break
process(lines)
lines = [next(fo) for fo in fileobjs]
process(lines)
这将一次逐行读取两个文件
with open('File1','r') as FileA, open('File2','r') as FileB:
for lineA,lineB in zip(FileA,FileB):
print lineA,lineB
这个呢?
from itertools import izip_longest
for file_lines in izip_longest(*map(open,filenames)):
for line in file_lines:
if line:
# process line
filenames = []
files = [open(f, mode='r') for f in filenames]
for line in files[0]:
lines = [file.readline() for file in files]
process(lines)