在我的代码中,我多次使用类似的东西:
with tempfile.TemporaryDirectory() as tmpdir:
retm = extract_subpath(path1, tmpdir)
if retm["returncode"] != 0:
raise RuntimeError("Failed to extract file: {}".format(retm["stderr"].strip()))
file = check_valid(tmpdir)
ret = extract_subpath(path2, tmpdir)
if ret["returncode"] != 0:
raise RuntimeError("Failed to extract file: {}".format(retm["stderr"].strip()))
validate(tmpdir)
这里
path1
和
path2
都被提取到同一个临时目录中。
我想将其转换为通用函数。最好的方法是什么?
使用类似的方法,如果我需要像上面那样多次使用相同的
tmpdir
我不能,因为每次调用都会返回不同的临时目录。
def extract_tmpdir(path: str) -> str:
with tempfile.TemporaryDirectory() as tmpdir:
ret = extract_subpath(path, tmpdir)
if ret["returncode"] != 0:
raise RuntimeError("Failed to extract file: {}".format(ret["stderr"].strip()))
return tmpdir
可以通过将临时目录传递给函数来创建一个通用的函数,以在需要时使用同一个临时目录:
import tempfile
def extract_and_process(tmpdir: str, path: str) -> None:
"""提取文件并对提取的文件执行操作。
Args:
tmpdir: 临时目录的路径。
path: 要提取的文件的路径。
"""
ret = extract_subpath(path, tmpdir)
if ret["returncode"] != 0:
raise RuntimeError(f"无法解压文件: {ret['stderr'].strip()}")
def main():
with tempfile.TemporaryDirectory() as tmpdir:
extract_and_process(tmpdir, path1)
file = check_valid(tmpdir)
extract_and_process(tmpdir, path2)
validate(tmpdir)
if __name__ == "__main__":
main()
此代码执行以下操作:
-
创建一个通用函数
extract_and_process
: -
它接收临时目录 (
tmpdir
) 和要解压的文件路径 (path
) 作为参数。 -
它在提供的
tmpdir
中解压文件。 -
它会检查
extract_subpath
的返回值,如果解压失败,则会引发异常。 -
在
main
函数中 : -
它使用
tempfile.TemporaryDirectory()
创建一个上下文管理器,该管理器创建一个临时目录,并在退出上下文后将其删除。 -
它调用
extract_and_process
两次,将相同的tmpdir
传递给两个调用。这确保两个文件都被解压到同一个临时目录中。 -
它对解压后的文件执行其他操作,例如
check_valid
和validate
。
此方法使可以重复使用相同的临时目录,同时保持代码的整洁和模块化。
标签:python From: 78809788