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
相关产品推荐
相关产品推荐

