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

