Mac系统下Python注册功能用户信息无法写入txt文件问题求助
问题原因及修复方案
以下是导致写入内容无法找到的核心原因,以及对应的修复方案:
- 写入逻辑顺序错误:当前代码在用户还未完成二次密码确认时就将内容写入文件,若用户两次密码输入不一致,会递归调用
register()函数,新的调用会以w(覆盖写入)模式重新打开文件,之前写入的内容会被清空,若用户中途结束程序就会出现文件为空的情况。 - 文件名拼写+路径查找问题:代码中使用的文件名为
databse.txt(缺少字母a,正确拼写为database.txt),同时Mac系统下Visual Studio运行Python脚本的默认工作目录不一定是脚本本身的存放目录,生成的文件会保存在工作目录下,你在脚本所在目录自然找不到对应文件。 - 文件操作方式不规范:手动调用
close()关闭文件时,如果中间步骤触发异常,会导致文件没有正常关闭,内存缓冲区的内容没有刷入磁盘,也会出现文件无内容的问题。
修正后的代码
import os def main_menu(): OPTION = input("Do you have an account? (yes/no)\n") if OPTION == "yes": login() elif OPTION == "no": register() def register(): while True: USERNAME = input("Create your username: \n") PASSWORD = input("Create your password: \n") PASSWORD_CHECK = input("Confirm your password: \n") if PASSWORD_CHECK != PASSWORD: print("Your passwords do not match. Try again. \n") continue # 密码校验通过后再写入文件 # 获取当前脚本所在目录,将文件生成到同目录下,避免找不到 script_dir = os.path.dirname(os.path.abspath(__file__)) file_path = os.path.join(script_dir, "database.txt") # 使用with上下文管理器自动处理文件关闭,无需手动调用close with open(file_path, "w", encoding="utf-8") as database: # 写入时添加换行符,方便后续登录功能拆分用户名和密码 database.write(USERNAME + "\n") database.write(PASSWORD + "\n") print("You have successfully created an account! Welcome!") # 后续菜单逻辑写在这里 break def login(): pass main_menu()
内容的提问来源于stack exchange,提问作者Sedat Yilmaz
相关产品推荐
相关产品推荐

