删除指定patientID文本数据遇报错:UnsupportedOperation及ID未找到
解决TXT文件患者数据删除的两个问题:文件读取错误与ID匹配失败
1. 修复UnsupportedOperation: not readable错误
错误原因
你的代码用open(fileName,"a")打开文件,"a"是追加写入模式,该模式下文件对象仅支持写入操作,无法读取内容,因此执行for line in f遍历读取会触发此错误。
解决方法
处理文件修改的标准流程是先读再写:
- 用
"r"(只读)模式打开文件,读取所有内容并筛选出需要保留的行 - 用
"w"(写入,会覆盖原文件)模式打开文件,将筛选后的内容写回
2. 解决"存在patientID却提示未找到"的问题
常见原因及修复
- 类型不匹配:输入的patientID是字符串,而文件中存储的是整数(或反之)。比如代码中将文件里的ID转成
int,但输入的ID没做类型转换,导致字符串和整数比较不相等。修复方式是确保输入ID和文件中ID的类型一致(统一转成int)。 - 行格式异常:文件中存在空行、行首尾有多余空格,或者分割后的ID字段包含非数字字符。修复时需跳过空行,对ID字段做
strip()处理,同时捕获类型转换异常避免崩溃。 - 逻辑错误:筛选行时的比较符号写错(比如用了
==而不是!=),导致错误保留/删除行。
修正后的完整代码
def delete_patient_data(file_name, target_id): remaining_patients = [] # 读取文件并筛选数据 try: with open(file_name, "r", encoding="utf-8") as f: for line in f: cleaned_line = line.strip() if not cleaned_line: continue # 跳过空行 values = cleaned_line.split(",") # 处理ID转换,兼容格式异常 try: patient_id = int(values[0].strip()) if patient_id != target_id: remaining_patients.append(cleaned_line) except ValueError: print(f"跳过格式无效的行: {cleaned_line}") except FileNotFoundError: print(f"错误:未找到文件 {file_name}") return # 将筛选后的数据写回文件 with open(file_name, "w", encoding="utf-8") as f: f.write("\n".join(remaining_patients)) f.write("\n") # 保留文件末尾换行 # 调用示例 try: target_id = int(input("请输入要删除的患者ID:")) delete_patient_data("patients.txt", target_id) print("数据删除完成") except ValueError: print("请输入有效的整数ID")
关键注意事项
- 操作前务必备份原文件,避免误操作导致数据丢失
- 若处理超大文件,可改用临时文件逐行写入,完成后替换原文件,减少内存占用
- 确保文件格式符合预期:每行一条患者数据,逗号分隔,第一个字段为整数类型的patientID
内容的提问来源于stack exchange,提问作者Thalia Smith
相关产品推荐
相关产品推荐

