在ZipFile中保留文件属性
我想找到一种方法,能在把文件写入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)
干杯!