我试图提供带有感叹号的密码作为zipfile的extractall
功能的密码的一部分,但有问题:
zf.extractall(pwd="password2015!")
我曾尝试过:将pwd作为字符串提供,这会返回一个类型错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python34\lib\zipfile.py", line 1240, in extractall
self.extract(zipinfo, path, pwd)
File "C:\Python34\lib\zipfile.py", line 1228, in extract
return self._extract_member(member, path, pwd)
File "C:\Python34\lib\zipfile.py", line 1290, in _extract_member
with self.open(member, pwd=pwd) as source, \
File "C:\Python34\lib\zipfile.py", line 1129, in open
raise TypeError("pwd: expected bytes, got %s" % type(pwd))
TypeError: pwd: expected bytes, got <class 'str'>
我也试过提供pwd=password2015\!
,但这会产生语法错误。
有谁知道为什么会返回这样的错误?我以为extractall应该期待一个字符串。
答案 0 :(得分:8)
正如错误所说,它期待字节,而不是str
。不确定为什么你认为感叹号是一个问题。使用其中一个:
zf.extractall(pwd=b'password2015!')
zf.extractall(pwd='password2015!'.encode('ascii'))
密码可能表示为不同编码中的不同字节,并且需要在字节级别与zip文件完全匹配。因此,该函数要求您自己处理编码并传递原始字节而不是字符串。