问题描述
我有以下简短程序
from zipfile import ZipFile
procfile1 ="C:\\Temp\\XLFile-Demo.zip"
procfile2 ="C:\\Temp2\\XLFile-Demo-PW123.zip"
# Unencrypted file
print ("Unencrypted file")
myzip1 = ZipFile(procfile1)
print (myzip1.infolist())
myzip1.extractall("C:\\Temp")
# Encrypted File
print ("Encrypted file")
myzip2 = ZipFile(procfile2)
print (myzip2.infolist())
myzip2.setpassword(bytes('123','utf-8'))
myzip2.extractall("C:\\Temp2")enter code here
这两个文件是Amazon Drive link。它们相同,除了一个邮政编码受密码 123 保护。
执行上述代码会成功提取未加密的代码,但会引发错误 NotImplementedError:另一种代码不支持该压缩方法。
Unencrypted file
[<ZipInfo filename='XLFile-Demo.xlsx' compress_type=deflate external_attr=0x20 file_size=31964 compress_size=29252>]
Encrypted file
[<ZipInfo filename='XLFile-Demo.xlsx' compress_type=99 external_attr=0x20 file_size=31964 compress_size=29280>]
我到底有做错什么吗?
解决方法
使用WinRar的ZIP选项压缩文件时出现错误。我安装了7Zip,并且可以正常工作。
7Zip文件的.infolist如下:
UNION ALL
WinRar可以偶然处理此文件,而7Zip可以正确处理WinRar创建的加密Zip存档。