使用 zipmodule 重命名 zip 文件夹中的文件

Posted

技术标签:

【中文标题】使用 zipmodule 重命名 zip 文件夹中的文件【英文标题】:rename files in zip folder using zipmodule 【发布时间】:2011-09-15 09:00:02 【问题描述】:

我想知道是否有人知道如何将我的 zip 文件夹中 ("fw/resources/logo.png") 下名为 "logo.png" 的文件重命名为 ("fw/resources/logo.png.bak" ),使用 python 的 zip 模块。

【问题讨论】:

你不能使用内置的zipfile 模块。 【参考方案1】:

正如rocksportrocker 所述,您不能从zipfile 存档中重命名/删除文件。您将遍历 zipfile 中的文件并有选择地添加所需的文件。因此,要从 zipfile 中删除某个目录,您不会将它们复制到新的 zipfile。应该是这样的:

source = ZipFile('source.zip', 'r')
target = ZipFile('target.zip', 'w', ZIP_DEFLATED)
for file in source.filelist:
    if not file.filename.startswith('directory-to-remove/'):
        target.writestr(file.filename, source.read(file.filename))
target.close()
source.close()

由于这会将所有文件读入内存,因此对于大型档案来说,这不是一个理想的解决方案。对于小型档案,这与宣传的一样。

【讨论】:

它真的会将整个文件加载到内存中吗?【参考方案2】:

我认为这是不可能的:zipfile 模块没有方法,正如Renaming a File/Folder inside a Zip File in Java? 中提到的那样,zip 文件的内部结构是障碍。所以你必须解压缩,重命名,压缩。

更新:刚刚发现 Delete file from zipfile with the ZipFile Module 应该可以帮到你。

【讨论】:

删除可以用shutil.rmtree的os.rmdir来完成,但是如果你只想重命名一个文件夹,我们可以用shutil.move 实际上,如何删除 zip 文件夹中的文件?

以上是关于使用 zipmodule 重命名 zip 文件夹中的文件的主要内容,如果未能解决你的问题,请参考以下文章

批量 zip 提取并使用 zip 文件名重命名

使用 PowerShell 重命名 zip 以匹配其内容

使用 perl 的 rename 函数重命名 zip 文件名 [关闭]

Java zip 压缩 文件夹删除,移动,重命名,复制

php 如何下载远程文件到本地重命名

解压并重命名