【发布时间】:2011-09-15 09:00:02
【问题描述】:
我想知道是否有人知道如何将我的 zip 文件夹中 ("fw/resources/logo.png") 下名为 "logo.png" 的文件重命名为 ("fw/resources/logo.png.bak" ),使用 python 的 zip 模块。
【问题讨论】:
-
你不能使用内置的
zipfile模块。
标签: python
我想知道是否有人知道如何将我的 zip 文件夹中 ("fw/resources/logo.png") 下名为 "logo.png" 的文件重命名为 ("fw/resources/logo.png.bak" ),使用 python 的 zip 模块。
【问题讨论】:
zipfile 模块。
标签: python
正如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()
由于这会将所有文件读入内存,因此对于大型档案来说,这不是一个理想的解决方案。对于小型档案,这与宣传的一样。
【讨论】:
我认为这是不可能的:zipfile 模块没有方法,正如Renaming a File/Folder inside a Zip File in Java? 中提到的那样,zip 文件的内部结构是障碍。所以你必须解压缩,重命名,压缩。
更新:刚刚发现 Delete file from zipfile with the ZipFile Module 应该可以帮到你。
【讨论】: