【发布时间】:2019-05-21 22:51:41
【问题描述】:
我有一些文件(其数量未预先确定),我想逐行或分块同时读取,进行一些处理并移至所有文件中的下一行(或块) .我想我的要求或多或少类似于this question 中的要求。但是,在我的情况下,文件可以有不同的行数,并且在尝试实现类似 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')
【问题讨论】:
标签: python-3.x file