Python如何根据指定ID删除txt文件内匹配的整行数据
按ID删除TXT文件对应行的实现方案
核心思路是读取文件时不要直接修改原文件,先把所有不需要删除的行收集到新列表,最后统一覆盖写回原文件,避免读写冲突或者遍历列表时动态删元素导致的索引错位问题。
现有代码的补全思路
你已经完成了文件读取、ID匹配的核心逻辑,后续不需要在匹配到对应行的时候做删除操作,只要反向收集所有ID不匹配的行即可:
- 先定义好你要操作的txt文件实际路径,替换掉原代码里未定义的
txt变量 - 新建空列表存储所有需要保留的行
- 逐行判断:如果当前行的ID和用户输入不一致,就把这行加入保留列表
- 遍历完成后,用写入模式打开原文件,把保留列表里的所有内容写回,就自动删掉了所有匹配ID的行
完整可运行代码
# 替换成你自己的txt文件实际存储路径 file_path = "user_info.txt" # 加strip()清除用户输入不小心带的前后空格、换行符 user_input = input("Please enter the id: ").strip() # 读取文件所有行 with open(file_path, "r", encoding="utf-8") as f: all_lines = f.readlines() keep_lines = [] for line in all_lines: # 跳过文件里的空行,避免split取索引时报错 if not line.strip(): continue # 同样给拆分出的ID加strip,清除前后可能存在的空白字符 current_id = line.split("---")[0].strip() if current_id != user_input: keep_lines.append(line) # 用写入模式打开文件,会自动清空原文件旧内容,写入保留的行 with open(file_path, "w", encoding="utf-8") as f: f.writelines(keep_lines)
效果说明
如果你输入ID123456,执行完代码后,原文件里4个ID为123456的行都会被删除,剩余内容为:
id---username---password---email 123456465---student---password---student@gmail.com 51654645686---student---password---student@gmail.com 1561654646--student---password---student@gmail.com
注意:你提供的示例文件里
1561654646--student这行的ID和用户名之间只有2个横杠,拆分后ID字段会包含后面的分隔符和用户名内容,不会和你输入的纯数字ID匹配,会被正常保留。
内容的提问来源于stack exchange,提问作者Tech
相关产品推荐
相关产品推荐

