在ZipFile中保留文件属性

7 投票
1 回答
5673 浏览
提问于 2025-04-15 23:45

我想找到一种方法,能在把文件写入zipfile.ZipFile实例时,保留文件的属性(比如只读属性)。

我添加到压缩文件中的文件,其文件属性会被重置,比如在用压缩软件查看压缩包时,只读标志就消失了,解压后也是这样。

我现在的环境是Windows,我在使用ZipInfo.external_attr方法时遇到了问题。

难道在写入ZipFile时,保留文件属性没有标准的方法吗?

1 个回答

5

我遇到的问题是关于zipfile.ZipInfo.external_attr这个东西,它的文档很少。网上找到的所有例子都提到的是*nix(类Unix系统)的文件权限风格。

但我的程序是在Windows上运行的。

于是我开始进行一些“逆向工程”。嘿嘿。

对于Windows的只读文件,ZipInfo.external_attr的魔法数字是33。

也就是说:

z = zipfile.ZipFile(targetFile, 'w')
(path, filename) = os.path.split(sourceFile)
bytes = file(sourceFile, 'rb')
info = zipfile.ZipInfo(filename)
info.external_attr = 33
z.writestr(info, bytes.read())
bytes.close()
z.close()

如果你需要找到其他类型属性的正确值,可以用一些Windows的压缩软件创建你想要的zip文件,然后在这个文件上运行以下代码:

z = zipfile.ZipFile(sourceFile, 'r')
info = z.getinfo('fileToTest.ext')
print ("create_system", info.create_system)
print ("external_attr", info.external_attr)
print ("internal_attr", info.internal_attr)

干杯!

撰写回答