gpt4 book ai didi

python-3.x - 如何在Python中同时打开多个文件?

转载 作者:行者123 更新时间:2023-12-02 19:59:17 28 4
gpt4 key购买 nike

我有几个文件(其数量未先确定),我想同时逐行或分块读取这些文件,进行一些处理并移至所有文件中的下一行(或 block ) 。我想我的要求或多或少类似于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')

最佳答案

您可以两全其美。

代码正在离开上下文 with ExitStack() as stack:因为zip()在最短的文件上已耗尽。与ExitStack()无关。使用zip_longest()在所有文件完成之前不会耗尽。然后ExitStack()将关闭文件。

from contextlib import ExitStack
from itertools import zip_longest

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_longest(*files):
print(lines)

关于python-3.x - 如何在Python中同时打开多个文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56247247/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com