如何使用Pyzipper为加密压缩包中的文件添加注释?
问题解决:Pyzipper给压缩包内单个文件添加注释
你的代码存在两个核心问题:
- 错误调用包注释属性:
zf.comment(...)是错误写法,zf.comment是赋值属性而非方法,且它控制的是整个压缩包的注释,并非包内单个文件的注释。 - 单个文件注释需通过ZipInfo对象配置:你看到的
self.comment = b""是ZipInfo类的属性,对应压缩包内单个文件的注释,必须通过创建ZipInfo实例来设置。
修正后的代码
import pyzipper def wgzipuser(wgfile,wgzippass): wgzipfilename = f"wgconfigs/{wgfile}.zip" conf_file_path = f"wgconfigs/{wgfile}.conf" with pyzipper.AESZipFile(wgzipfilename, 'w', compression=pyzipper.ZIP_LZMA, compresslevel=9, ) as zf: # 1. 创建对应文件的ZipInfo对象,自动读取原文件元数据 zinfo = pyzipper.ZipInfo.from_file(conf_file_path) # 2. 设置单个文件的注释,需转为字节串格式 zinfo.comment = bytes("这是.conf文件的专属注释", encoding="utf-8") zf.setpassword(bytes(wgzippass, encoding="utf-8")) zf.setencryption(pyzipper.WZ_AES, nbits=256) # 3. 写入文件时传入配置好的ZipInfo对象 zf.write(conf_file_path, zinfo=zinfo) # 若需给整个压缩包加注释,直接赋值即可 # zf.comment = b"这是整个压缩包的注释" print(wgzipfilename) return wgzipfilename
关键说明
ZipInfo.from_file()会自动读取原文件的权限、修改时间等元数据,也可手动创建ZipInfo对象自定义这些信息。- 文件注释必须是字节串,可通过
bytes(注释内容, encoding="utf-8")转换,ASCII字符也可直接用b"注释内容"。 - 建议使用最新版pyzipper,避免旧版本的兼容性问题。
内容的提问来源于stack exchange,提问作者motoTrail
相关产品推荐
相关产品推荐

