我想采用任意数量的路径来表示嵌套的tar档案,并对最里面的档案执行操作.问题是,嵌套可以是任意的,因此我需要的上下文管理器的数量也是任意的.
举个例子:
ARCHIVE_PATH = "path/to/archive.tar"
INNER_PATHS = (
"nested/within/archive/one.tar","nested/within/archive/two.tar",# Arbitary number of these
)
def list_inner_contents(archive_path,inner_paths):
with TarFile(archive_path) as tf1:
with TarFile(fileobj=tf1.extractfile(inner_paths[0])) as tf2:
with TarFile(fileobj=tf2.extractfile(inner_paths[1])) as tf3:
# ...arbitary level of these!
return tfX.getnames()
contents = list_inner_contents(ARCHIVE_PATH,INNER_PATHS))
我不能使用with语句的nesting syntax,因为可以有任意数量的级别来嵌套.我不能使用contextlib.nested
因为文档在那里说:
…using
nested()
to open two files is a programming error as the first file will not be closed promptly if an exception is thrown when opening the second file.
有没有办法使用语言结构来执行此操作,还是需要手动管理我自己的打开文件对象堆栈?