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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 02:54:03