Python写入.py文件报io.UnsupportedOperation: not writable错误如何解决
问题原因
你调用open()函数时没有指定文件打开模式,Python默认使用只读模式(r)打开文件,该模式下禁止写入操作,因此触发io.UnsupportedOperation: not writable报错。
另外就算你修改了打开模式,直接在遍历文件句柄的过程中写入也会出现问题:文件指针会随着遍历逐行后移,写入位置不可控,且普通读写模式无法直接在文件中间插入内容,会覆盖原有数据。
正确实现方案
对于小体积的文件,推荐先把所有内容读取到内存修改,再整体写回文件,示例代码如下:
# 1. 以只读模式读取所有行到列表 with open("data.py", "r", encoding="utf-8") as f: lines = f.readlines() # 2. 修改对应行内容,注意enumerate从0开始计数,i==7对应文件的第8行 if len(lines) >= 8: # 替换第8行内容,记得加换行符避免和下一行内容粘连 lines[7] = "test\n" # 如果是要在第8行前插入新行,用 lines.insert(7, "test\n") # 如果是要在第8行后插入新行,用 lines.insert(8, "test\n") # 3. 以写入模式打开文件,把修改后的内容写回 with open("data.py", "w", encoding="utf-8") as f: f.writelines(lines)
补充说明
open()常用模式说明:r:只读模式(默认),文件不存在会抛出异常w:只写模式,文件不存在会自动创建,文件已存在会先清空原有内容r+:读写模式,文件不存在会抛出异常,写入默认从文件开头逐位覆盖原有内容a:追加模式,写入的内容只会追加到文件末尾
- 推荐使用
with语法管理文件句柄,执行完代码块后会自动关闭文件,无需手动调用close()避免资源泄漏
内容的提问来源于stack exchange,提问作者Adachi Sakura
相关产品推荐
相关产品推荐

