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

Python3.4:将文本框内容写入文件指定行失败,始终写入首行

解决Python写入文件指定行却写到第一行的问题

嘿,我来帮你排查一下这个问题!你遇到的核心问题是代码逻辑和文件操作模式的使用有误,导致内容没有写到预期的第21行,反而跑到了第一行。

问题出在哪?

先看你代码里的几个关键问题:

  1. get_all未定义:你的代码里用了enumerate(get_all,1),但get_all并没有被赋值为文件的行内容,这会导致循环根本没执行,直接跳到f.writelines语句。而r+模式打开文件时,初始指针在文件开头,所以内容直接写到了第一行。
  2. r+模式的写入逻辑错误:就算你把get_all改成f(遍历打开的文件行),r+模式下的写入是覆盖当前指针位置的内容,不是插入到指定行。当你遍历到第21行时,文件指针已经移动到该行的位置,但直接写入会覆盖掉原来的第21行内容,甚至可能因为指针位置判断不准,导致写入位置错误。

正确的解决方案

要修改或插入到文件的指定行,最稳妥的方式是先把所有行读入内存,修改后再整体写回文件。这样逻辑清晰,也不容易出错。针对你的需求,修正后的代码如下:

if event == 'Event 1' and indivcombo == 'Individual 1':
    # 第一步:读取文件所有行到列表(方便修改指定行)
    with open("data/tournamentdatae1.txt", 'r') as f:
        lines = f.readlines()
    
    # 第二步:处理指定行的内容(第21行对应列表索引20,因为Python列表从0开始)
    target_line = 21
    content = individual.get() + "\n"  # 把内容加上换行符,保证格式统一
    
    if len(lines) >= target_line:
        # 如果文件已有足够行数,替换第21行的内容
        lines[target_line - 1] = content
    else:
        # 如果行数不够,先补充空行到第20行,再添加目标内容作为第21行
        lines += ['\n'] * (target_line - 1 - len(lines))
        lines.append(content)
    
    # 第三步:把修改后的内容写回文件
    with open("data/tournamentdatae1.txt", 'w') as f:
        f.writelines(lines)

为什么这个方案可行?

  • 先读取所有行到列表,我们可以直接通过索引定位到目标行,操作更直观。
  • 使用w模式写回时,会清空原文件并写入修改后的内容,确保内容准确对应到指定行。
  • 增加了行数判断,避免文件行数不足时出现索引越界的错误。

内容的提问来源于stack exchange,提问作者Jack i chan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:50:05