You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python使用append模式打开文件却无法写入是什么原因?

Python追加模式打开文件写入时报错的原因及修复

错误原因

  • 你使用"a"(追加)模式打开文件时,该模式默认是只写权限,不支持读取操作。你在打开文件后直接调用read()方法读取内容,首先就会触发IO操作异常,你看到的io.UnsupportedOperation: not writable属于操作顺序错误引发的连锁异常。
  • 就算你改用支持读写的a+模式打开文件,追加模式下文件指针默认处于文件末尾,直接调用read()也会读不到任何内容,无法正确判断用户名是否重复。

修复方案

调整操作顺序,先读文件判断用户名是否存在,确认无冲突后再打开文件写入新用户名,推荐使用with语句自动管理文件句柄,无需手动调用close()。
修复后的参考代码:

def register():
    global username
    username = str(input("Please enter a username \n")).lower()
    # 第一步:先以只读模式打开文件,读取所有已有用户名
    with open("C:/test/User_Dat.txt", "r", encoding="utf-8") as read_f:
        # 逐行读取并去掉每行末尾的换行符,避免匹配错误
        exist_users = [line.strip() for line in read_f.readlines()]
    if username in exist_users:
        print('The user', username, 'has already been created.')
        welcome()
    else:
        # 第二步:确认用户名不存在,再以追加模式打开写入
        print('The user', username, 'has been created!')
        with open("C:/test/User_Dat.txt", "a", encoding="utf-8") as write_f:
            write_f.write(username + "\n")
        login()

额外优化建议

  • 打开文件时指定encoding参数,避免不同系统默认编码不一致导致乱码
  • 读取用户名时逐行处理去除换行符,避免因为用户名带换行符导致匹配失败
  • 使用with语句管理文件资源,就算中途代码抛出异常也会自动关闭文件,不会出现资源泄漏

内容的提问来源于stack exchange,提问作者Bwakell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 18:24:02