账号/密码分发工具:从CSV创建对象时受阻
问题解决思路与代码修正
先修正你创建账号对象的代码问题
你当前的代码存在几个关键问题,导致无法正确生成独立的账号实例并存储到数组中:
- 类名不符合Python规范:Python类名建议使用大驼峰命名(比如
Account而非account),避免和变量名混淆 - 实例化参数错误:
account(account, password)里第一个参数传了类本身,应该传入读取到的accountname - 错误修改类属性而非实例属性:
account.password=pw_generator(16)是给整个account类设置属性,不是给当前创建的账号实例设置,会导致所有账号共享同一个密码 - 初始化逻辑冗余:你不需要在实例化时传入
password,直接在创建实例时调用密码生成函数即可
修正后的代码
import csv import random import string def pw_generator(length): lower = string.ascii_lowercase upper = string.ascii_uppercase num = string.digits symbols = string.punctuation all_chars = lower + upper + num + symbols # 改用random.choices避免length大于字符集长度时报错(允许重复选取字符) randompw = random.choices(all_chars, k=length) password = "".join(randompw) return password # 修正类名和初始化逻辑 class Account: def __init__(self, accountname): self.accountname = accountname # 初始化时直接生成专属密码 self.password = pw_generator(16) acc_list = [] with open('accounts.csv', newline='') as csv_file: reader = csv.reader(csv_file) next(reader, None) # 跳过表头 for row in reader: if row: # 处理空行 accountname = row[0].strip() # 创建Account实例并添加到数组 acc_instance = Account(accountname) acc_list.append(acc_instance) print(accountname, acc_instance.password)
如何使用acc_list数组
现在acc_list存储了所有独立的Account实例,你可以通过以下方式操作:
- 遍历所有账号:
for acc in acc_list: print(f"账号名: {acc.accountname}, 密码: {acc.password}") - 根据账号名查找实例:
target_account = "Username1" for acc in acc_list: if acc.accountname == target_account: print(f"找到目标账号: {acc.accountname}, 密码: {acc.password}") break - 提取账号名/密码到单独列表:
account_names = [acc.accountname for acc in acc_list] account_passwords = [acc.password for acc in acc_list]
后续功能扩展提示
针对你要实现的用户权限分发和加密压缩包功能,可以:
- 读取
users.csv时,记录用户对应的权限关联账号 - 对每个用户,筛选出对应权限的账号,截取密码的半段(比如
acc.password[:len(acc.password)//2])写入txt文件 - 使用
zipfile模块创建加密压缩包(注意:标准库zipfile仅支持传统Zip加密,需强加密可使用第三方库pyzipper)
内容的提问来源于stack exchange,提问作者daveyo
相关产品推荐
相关产品推荐

