python - 编辑 zip 文件(在内存中)
问题描述
我需要重命名(和编辑)zip 文件中的文件。到目前为止,我为重命名所做的是:
subprocess.call(["unzip", zipfile, f])
subprocess.call(["zip", "--delete", zipfile, f])
subprocess.call(["mv", f, f_new])
subprocess.call(["zip", "-qq", "-y", "--move", zipfile, f_new])
这会使工作目录变得混乱,并且通常看起来像是糟糕的编码。理想情况下,我有办法在 python 中执行此操作,最好完全在内存中。我查看了该zipfile
模块,但是这似乎不是很直观或有据可查。它似乎还缺少一些基本操作,例如删除文件(使用 ZipFile 模块从 zipfile 中删除文件)。还使用损坏的存档附加文件zipfile
(我猜它使用自己的压缩)。
有没有比系统调用更合理的重命名/删除/添加/编辑压缩文件的方法?
从头开始创建一个新的 zip 文件并重新压缩所有内容似乎比系统调用更糟糕。
解决方案
我在这里找到了一个可能的解决方案:https : //superuser.com/a/687167/1171118 似乎您可以通过访问 file.filename 来更改文件名。在解决方案中,该人事后提取了文件,但由于您不想这样做,所以不要复制该步骤。
os.rename
是另一种选择,我不知道它是否适用于 zip 内的文件。
推荐阅读
- javascript - 如何在不返回浏览器的情况下使用 JavaScript 返回上一个路由?
- mysql - 如何将csv文件的某些列导入mysql phpmyadmin
- mongodb - MongoDB 的查询优化器有多可靠?
- c# - 在 C# 中替换 xml 字符串时出错
- php - 如何回显在 unlink 方法中的函数中返回的变量
- json - 将 JSON 转换为缺少字段名的 CSV
- c++ - 使用基于此标志的条件语句是否比添加更多代码行更有效?
- .net-core - .Net Core 查询来自不同微服务的记录
- javascript - 使用“relay-test-utils”测试反应组件
- swift - 你能在 Swift 中测试目标配置吗?