Python3.4:将文本框内容写入文件指定行失败,始终写入首行
解决Python写入文件指定行却写到第一行的问题
嘿,我来帮你排查一下这个问题!你遇到的核心问题是代码逻辑和文件操作模式的使用有误,导致内容没有写到预期的第21行,反而跑到了第一行。
问题出在哪?
先看你代码里的几个关键问题:
get_all未定义:你的代码里用了enumerate(get_all,1),但get_all并没有被赋值为文件的行内容,这会导致循环根本没执行,直接跳到f.writelines语句。而r+模式打开文件时,初始指针在文件开头,所以内容直接写到了第一行。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
相关产品推荐
相关产品推荐

