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

Python文件操作报错io.UnsupportedOperation: not readable及相关问题咨询

Python文件操作问题解答

报错原因与修正

你用open("Status.txt", "x")打开文件时,"x"模式是创建新文件且仅支持写入,所以调用read()会触发io.UnsupportedOperation: not readable错误。而且刚用"x"创建的文件是空的,读取也得不到有效内容。

如果你的需求是:文件不存在就创建,存在就读取内容,再写入新内容,可参考以下修正代码:

import os

# 文件不存在则创建空文件
if not os.path.exists("Status.txt"):
    with open("Status.txt", "w") as f:
        pass

# 读取文件内容
with open("Status.txt", "r") as Status:
    UserName = Status.read().strip()  # 去除首尾空白字符

# 写入新内容
with open("Status.txt", "w") as StatusFileWrite:
    StatusFileWrite.write(f"Hello {UserName} :)")

如果要在创建文件后立即完成读写操作,可使用"x+"模式(创建新文件并支持读写),但需注意文件指针位置:

with open("Status.txt", "x+") as f:
    UserName = f.read().strip()  # 刚创建的文件为空,读取结果是空字符串
    f.seek(0)  # 移动指针到文件开头
    f.write(f"Hello {UserName} :)")
    f.truncate()  # 截断多余内容(确保旧内容被完全覆盖)

文件创建后立即修改内容

常用两种实现方式:

  • 使用"x+"模式:创建新文件的同时开启读写权限,读取后通过f.seek(0)将指针移到文件开头,再执行写入操作,最后用f.truncate()截断多余内容。
  • 分两步操作:先用"x"或"w"模式创建文件并关闭,再用"r+"或"w"模式重新打开修改,但这种方式会多一次IO操作,效率不如前者。

指定读取文件的某一行

推荐三种实用方法:

  • 方法一(小文件适用):用readlines()将所有行加载为列表,通过索引获取目标行(索引从0开始):
    with open("Status.txt", "r") as f:
        lines = f.readlines()
        # 获取第2行(对应索引1)
        if len(lines) >= 2:
            target_line = lines[1].strip()
    
  • 方法二(大文件适用):循环遍历文件,计数匹配目标行号,无需加载全部内容到内存:
    target_line_num = 3  # 要获取第3行
    result_line = None
    with open("Status.txt", "r") as f:
        current_num = 0
        for line in f:
            current_num += 1
            if current_num == target_line_num:
                result_line = line.strip()
                break
    
  • 方法三(简洁写法):用enumerate()简化计数逻辑,直接让索引对应行号:
    target_line_num = 3
    with open("Status.txt", "r") as f:
        for idx, line in enumerate(f, start=1):  # start=1让索引从1开始
            if idx == target_line_num:
                result_line = line.strip()
                break
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 12:55:05