Python如何无需指定索引将列表写入替换txt文件的指定行
解决Python无需手动指定索引替换TXT文件指定行问题
原代码核心问题
- 采用
a追加模式打开文件,只能将内容写入文件末尾,无法修改中间行 - 行定位依赖行索引,后续如果增删航班会导致匹配错位
- 写入逻辑存在语法错误,且会破坏原文件的内容格式
实现思路
先将整个TXT文件按行读入列表存储,通过匹配行开头的
[航班编号]自动定位目标行,修改完成后将全部行内容覆写回原文件,全程不需要手动计算或指定行索引。
完整可运行代码
# 获取用户输入的要编辑的航班号 while True: try: code = int(input("Which flight to edit: ")) break except ValueError: print("请输入数字类型的航班编号") continue # 读取文件所有行 with open('schedule.txt', 'r', encoding='utf-8') as f: lines = f.readlines() target_line_idx = None target_data = None line_prefix = f"[{code}] " # 遍历匹配目标航班行 for idx, line in enumerate(lines): if line.startswith(line_prefix): target_line_idx = idx # 提取行内容,去掉前缀和换行符 content = line.removeprefix(line_prefix).strip() # 拆分字段,清除每个字段前后的空格 target_data = [field.strip() for field in content.split(',')] print("The selected flight to modify is:\n", target_data) break if target_line_idx is None: print("未找到对应的航班") exit() # 编辑字段逻辑和原逻辑保持一致 while True: old_data = str(input("\nData to edit: ")).upper() if old_data in target_data: new_data = str(input("New data: ")).upper() for i in range(len(target_data)): if target_data[i] == old_data: target_data[i] = new_data print("The updated list is: ", target_data) break else: print("Data not found, Please re-enter") continue # 重构修改后的行,保持原格式 new_line = line_prefix + ', '.join(target_data) + '\n' lines[target_line_idx] = new_line # 写回文件 with open('schedule.txt', 'w', encoding='utf-8') as f: f.writelines(lines)
代码说明
- 自动通过行开头的
[x]标识定位目标行,和行的位置没有关联,就算后续调整航班顺序、增删航班也不会匹配错误 - 修改后自动保留原文件的行格式,不会破坏整体结构
- 采用全量覆写的方式写入文件,不会出现内容追加、重复的问题
内容的提问来源于stack exchange,提问作者L.zh
相关产品推荐
相关产品推荐

