首页 > 解决方案 > 使用 Python mkdtemp() 解压缩到临时(内存中)目录?

问题描述

我浏览了那里的示例,似乎没有找到合适的示例。

希望使用 Python 将内存中的文件解压缩到临时目录mkdtemp()

像这样的东西感觉很直观,但我找不到正确的语法:

import zipfile
import tempfile


zf = zipfile.Zipfile('incoming.zip')

with tempfile.mkdtemp() as tempdir:
    zf.extractall(tempdir)

# do stuff on extracted files

但这会导致:

AttributeError                            Traceback (most recent call last)
<ipython-input-5-af39c866a2ba> in <module>
      1 zip_file = zipfile.ZipFile('incoming.zip')
      2 
----> 3 with tempfile.mkdtemp() as tempdir:
      4     zip_file.extractall(tempdir)

AttributeError: __enter__

标签: pythonunziptemp

解决方案


我已经在评论中提到了为什么您编写的代码不起作用。.mkdtemp()仅将路径作为字符串返回,但您真正想要的是上下文管理器。

您可以使用正确的功能轻松解决此问题.TemporaryDirectory()

此函数使用与 mkdtemp() 相同的规则安全地创建临时目录。生成的对象可以用作上下文管理器(参见示例)。在临时目录对象的上下文或销毁完成后,新创建的临时目录及其所有内容都将从文件系统中删除。


zf = zipfile.ZipFile('incoming.zip')

with tempfile.TemporaryDirectory() as tempdir:
    zf.extractall(tempdir)

仅此一项就可以了


推荐阅读