Python中如何向文本文件写入多个变量?密码生成器写入异常问题
解决密码生成器仅写入最后一个密码的问题
嘿,我一眼就看出问题出在哪了——你应该是在循环生成密码的时候,每次都用w模式打开文件,这种模式会清空文件原有内容再写入,所以循环结束后自然只剩最后一个密码啦。下面给你两种简单的修复方案,选哪种都能解决问题:
方案一:先收集所有密码,一次性写入(推荐)
这种方法效率更高,因为只需要打开和关闭文件一次,适合大多数场景:
#!/usr/bin/python3 import random # 字符列表 Characters = "abcdefghijklmnopqrstuvwxyz!@#$%^&*()_+-=[];\',./ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890" # 获取并验证用户输入(避免非数字导致报错) try: password_length = int(input("Password Length > ")) num_of_passwords = int(input("Number of passwords to generate > ")) except ValueError: print("Oops! Please enter valid numbers for length and count.") exit() # 先把所有生成的密码存到列表里 generated_passwords = [] for _ in range(num_of_passwords): # 随机生成指定长度的密码 new_password = ''.join(random.choice(Characters) for _ in range(password_length)) generated_passwords.append(new_password) # 一次性写入所有密码到文件 with open("passwords.txt", "w") as file: # 每个密码单独占一行 file.write("\n".join(generated_passwords) + "\n") print(f"Done! {num_of_passwords} passwords saved to passwords.txt")
方案二:用追加模式写入文件
如果希望在生成过程中实时写入文件(比如生成非常多密码时),可以用a模式(追加模式)打开文件,这样每次写入都会加到文件末尾,不会覆盖之前的内容:
#!/usr/bin/python3 import random Characters = "abcdefghijklmnopqrstuvwxyz!@#$%^&*()_+-=[];\',./ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890" try: password_length = int(input("Password Length > ")) num_of_passwords = int(input("Number of passwords to generate > ")) except ValueError: print("Oops! Please enter valid numbers for length and count.") exit() # 先清空文件(如果需要每次运行都生成全新的密码列表) with open("passwords.txt", "w"): pass # 循环生成并追加密码 for _ in range(num_of_passwords): new_password = ''.join(random.choice(Characters) for _ in range(password_length)) # 用'a'模式打开,追加内容 with open("passwords.txt", "a") as file: file.write(new_password + "\n") print(f"Done! {num_of_passwords} passwords saved to passwords.txt")
关键知识点总结
w模式:每次打开都会清空文件,适合一次性写入全新内容a模式:打开后会将内容追加到文件末尾,适合逐步添加内容- 优先选方案一,减少文件IO操作,性能更好
内容的提问来源于stack exchange,提问作者Mario Agolli
相关产品推荐
相关产品推荐

