У меня есть несколько файлов (число которых априори не определено), которые я хотел бы прочитать одновременно, построчно или фрагментами, выполнить некоторую обработку и перейти ко следующей строке (или фрагменту) во всех файлах.,Я предполагаю, что мои требования более или менее похожи на те, что указаны в в этом вопросе .Тем не менее, в моем случае файлы могут иметь различное количество строк и при попытке реализовать что-то вроде ExitStack заметил, что все файлы будут закрыты, как только один из них будет закрыт (вероятно, это тот, который снаименьшее количество строк), тогда как я хотел бы продолжить обработку других файлов (в конечном итоге назначив пустые строки «строкам» закрытых файлов).Возможно ли это сделать?И как?
#cat f1.txt
RNvn 40
AvOp 13
yEVA 94
oNGn 10
VZQU 88
#cat f2.txt
gSNn 4
zxHP 84
ebRw 70
NaxL 2
lXUb 49
PQzn 79
aIyN 88
#cat f3.txt
XXce 5
RMIq 4
FFEi 47
wuLZ 60
При простой реализации ExitStack
результат включает в себя только 4 строки, потому что файл f3.txt
имеет всего 4 строки:
flist = ['f1.txt', 'f2.txt', 'f3.txt']
with ExitStack() as stack:
files = [stack.enter_context(open(fname)) for fname in flist]
for lines in zip(*files):
print(lines)
# prints
('RNvn 40\n', 'gSNn 4\n', 'XXce 5\n')
('AvOp 13\n', 'zxHP 84\n', 'RMIq 4\n')
('yEVA 94\n', 'ebRw 70\n', 'FFEi 47\n')
('oNGn 10\n', 'NaxL 2\n', 'wuLZ 60\n')