使用 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 文件夹中的文件的主要内容,如果未能解决你的问题,请参考以下文章