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

Python预约程序读取data.txt时报UnsupportedOperation不可读错误如何解决

错误原因

直接原因是你使用"a"(追加写入)模式打开文件,该模式仅支持写入操作,不允许读取文件内容,因此调用readlines()时触发不可读的报错。
除此之外你的代码还存在多个逻辑问题会导致后续运行失败:

  • 从文件读取的每行内容是字符串格式,无法直接当作嵌套列表使用索引取值,需要先反序列化为Python列表对象
  • line[1].write(person_ name)写法错误:首先person_ name变量名中间多了空格会触发命名错误,其次内存中的列表对象没有write方法,你需要先修改所有符合条件的列表项,再统一写回文件
  • 没有处理文件关闭逻辑,容易出现资源泄露
  • 示例data.txt每行前有多余空白字符,直接解析会报错
修复后的完整代码
import ast

def Make_Appointment(person_name, available_day, available_time):
    # 先以可读模式打开文件读取所有内容
    records = []
    with open("data.txt", "r", encoding="utf-8") as f:
        for line in f.readlines():
            # 去掉行前后的空白字符,空行跳过
            stripped_line = line.strip()
            if not stripped_line:
                continue
            # 把字符串反序列化为列表
            record = ast.literal_eval(stripped_line)
            # 匹配条件,符合就把姓名加到名单里
            if record[0][1] == available_day and record[0][2] == available_time:
                record[1].append(person_name)
            records.append(record)
    
    # 把修改后的所有记录重新写回文件
    with open("data.txt", "w", encoding="utf-8") as f:
        for record in records:
            f.write(f"{record}\n")
使用示例

比如要给周五2000的晚餐局添加姓名张三,调用方式:
Make_Appointment("张三", "Friday", "2000")
修改后data.txt对应行会变成[["Dinner", "Friday", "2000"], ["张三"]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 12:36:04