首页 > 编程问答 >解压到临时目录的函数

解压到临时目录的函数

时间:2024-07-30 12:13:17浏览次数:12  
标签:python

在我的代码中,我多次使用类似的东西:

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()

此代码执行以下操作:

  1. 创建一个通用函数 extract_and_process :
  2. 它接收临时目录 ( tmpdir ) 和要解压的文件路径 ( path ) 作为参数。
  3. 它在提供的 tmpdir 中解压文件。
  4. 它会检查 extract_subpath 的返回值,如果解压失败,则会引发异常。

  5. main 函数中 :

  6. 它使用 tempfile.TemporaryDirectory() 创建一个上下文管理器,该管理器创建一个临时目录,并在退出上下文后将其删除。
  7. 它调用 extract_and_process 两次,将相同的 tmpdir 传递给两个调用。这确保两个文件都被解压到同一个临时目录中。
  8. 它对解压后的文件执行其他操作,例如 check_valid validate

此方法使可以重复使用相同的临时目录,同时保持代码的整洁和模块化。

标签:python
From: 78809788

相关文章

  • 在家用电脑上设置 Python 和 Jupyter,尝试打开 Jupyter 笔记本并显示错误,无法获取
    我有最新的Python版本3.12.4和以下版本的Jupyter:SelectedJupytercorepackages...IPython:8.26.0ipykernel:6.29.5ipywidgets:notinstalledjupyter_client:8.6.2jupyter_core:5.7.2jupyter_server:2.14.2jupyterlab......
  • Python - Reloading a module
    Eachmoduleisloadedintomemoryonlyonceduringaninterpretersessionorduringaprogramrun,regardlessofthenumberoftimesitisimportedintoaprogram.Ifmultipleimportsoccur,themodule’scodewillnotbeexecutedagainandagain.Suppose......
  • vscode python 3.7 pylance debugpy 插件 vsix
    可能报错  crashed5timesinthelast3minutes.Theserverwillnotberestarted.  ---pylance 可能报错  cannotreadpropertiesofundefinedreadingresolveEnvironment   --- debugger可能      vscodepython3.7调试没有反应......
  • Python获取秒级时间戳与毫秒级时间戳的方法[通俗易懂]
    参考资料:https://cloud.tencent.com/developer/article/21581481、获取秒级时间戳与毫秒级时间戳、微秒级时间戳代码语言:javascript复制importtimeimportdatetimet=time.time()print(t)#原始时间数据print(int(t))......
  • CEFPython
    在Tkinter界面中直接嵌入Selenium的浏览器视图并不是一件直接的事情,因为Selenium本身并不提供图形界面嵌入的功能。Selenium主要用于自动化web浏览器,但它并不直接控制浏览器窗口的显示方式,而是依赖于WebDriver来与浏览器交互。然而,你可以使用一些替代方案来在Tkinter应用中模拟或......
  • 《最新出炉》系列初窥篇-Python+Playwright自动化测试-58 - 文件下载
    1.简介前边几篇文章讲解完如何上传文件,既然有上传,那么就可能会有下载文件。因此宏哥就接着讲解和分享一下:自动化测试下载文件。可能有的小伙伴或者童鞋们会觉得这不是很简单吗,还用你介绍和讲解啊,不说就是访问到下载页面,然后定位到要下载的文件的下载按钮后,点击按钮就可以了。其实......
  • Python - Function Annotations
     deffunc(s:str,i:int,j:int)->str:returns[i:j]Theparametersissupposedtobeastring,soweplaceacolonaftertheparameternameandthenwritestr.Parametersiandjaresupposedtobeintegerssowewriteintforthem.Returntypeis......
  • 使用带有 pythonKit XCODE 的嵌入式 Python,在 iOS 应用程序中与 OpenCV-python 签名不
    我根据Beewares使用指南在XCODE中将Python嵌入到我的iOS项目中https://github.com/beeware/Python-Apple-support/blob/main/USAGE.md运行时,我得到pythonKit找不到由ultralytics导入的cv2错误。当我将OpenCV-python添加到我的app_packages文件夹时......
  • Python - Arguments and Parameters
    ParametersinFunctionDefinitionA.deffunc(name):MatchbypositionorbynameB.deffunc(name=value):DefaultargumentC.deffunc(*args):CollectextrapositionalargumentsintuplenamedargsD.deffunc(**kwargs):Collectextrakeywordargumentsi......
  • Python MySQL 无法连接,原因不明
    当我尝试使用python连接到我的MySQL数据库时,由于未知原因显示错误:dTraceback(mostrecentcalllast):File"/usr/local/bin/flask",line8,in<module>sys.exit(main())^^^^^^File"/usr/local/lib/python3.12/site-packages/flask/cli.py&......