Python运行程序写入文本文件时如何避免覆盖原有用户输入数据?
问题根因
现有代码存在3个影响数据持久化的错误:
- 打开
data.txt时使用"w"覆盖写入模式,该模式打开文件瞬间会清空全部原有内容,每次运行都从文件起始位置写入新数据,旧数据自然会被删除 - Python文件对象没有
add()写入方法,原代码实际运行时会直接抛出AttributeError,根本无法完成写入操作 - 代码未做文件关闭处理,极端场景下会出现写入内容落盘失败的问题
修复方案
- 将文件打开模式从
"w"替换为"a"追加写入模式:该模式会保留文件全部原有内容,将写入指针定位到文件末尾,新写入的内容会直接追加在旧数据之后,不会覆盖历史记录 - 将错误的
add()调用替换为标准文件写入方法write() - 推荐使用
with上下文管理器操作文件,写入完成后会自动释放文件资源,无需手动调用close() - 每条记录末尾添加分隔线,区分不同批次存入的账号信息,提升后续读取解析的便利性
修正后的可运行代码(已将原代码中英文提示翻译为中文):
import time username_Database = [] password_Database = [] username = input("请输入用户名\n") username_Database.append(username) password = input("请输入密码\n") password_Database.append(password) print(f'注册成功!\n你的用户名是:{username_Database[0]}\n你的密码是:{password_Database[0]}\n') print("正在保存信息...") # 追加模式打开文件,自动处理文件关闭 with open("data.txt", "a", encoding="utf-8") as file: file.write(f"用户名: {username_Database[0]}\n") file.write(f"密码: {password_Database[0]}\n") # 追加分隔线区分不同账号记录 file.write("-" * 20 + "\n") time.sleep(2)
注意事项
明文存储密码存在严重安全风险,如果是正式使用场景,务必对密码做加盐哈希处理后再存入文件,不要直接保存明文密码。后续需要读取历史数据时,逐行遍历data.txt按写入规则解析即可。
内容的提问来源于stack exchange,提问作者Peyton Anderson
相关产品推荐
相关产品推荐

