Python文本文件处理:实现答对单词对删除及全文件遍历
问题原因解释
- 读写指针冲突:用
r+模式打开文件时,读、写操作共用同一个文件指针。第一次循环读完前两行后,指针移到第三行开头;此时执行f.write()会直接从当前指针位置写入,覆盖后续内容,写完后指针跳到文件末尾,下一次readline()会读到空内容,直接触发break终止循环,自然没法遍历所有单词对。 - 逻辑完全颠倒:需求是答对就删除该单词对,但代码里答对反而把单词对写回文件,答错却什么都不做,完全不符合预期。
修复方案
核心思路是先把所有单词对读进内存,逐一测试后,只将答错的单词对写回文件,彻底避免读写指针的冲突问题,同时理顺逻辑。
修复后的代码:
file_name = 'wordlist.txt' # 读取所有完整的德英单词对到内存 word_pairs = [] with open(file_name, 'r', encoding='utf-8') as f: while True: deu_line = f.readline() eng_line = f.readline() # 两行都为空时停止读取 if not deu_line and not eng_line: break # 只保留成对的行(避免文件末尾出现单行的情况) if deu_line and eng_line: # 存储:处理后的德语单词、处理后的英语单词、原始德语行、原始英语行 word_pairs.append((deu_line.rstrip(), eng_line.strip(), deu_line, eng_line)) # 逐一测试单词对,收集答错的内容 wrong_pairs = [] for deu_word, eng_word, orig_deu, orig_eng in word_pairs: user_answer = input(f"{eng_word}: ").strip() if user_answer == deu_word: print('Correct!') else: print(f'Wrong - {deu_word}') # 答错的保留原始行格式,方便后续复习 wrong_pairs.append((orig_deu, orig_eng)) # 将答错的单词对写回文件(覆盖原文件) with open(file_name, 'w', encoding='utf-8') as f: for deu_line, eng_line in wrong_pairs: f.write(deu_line) f.write(eng_line)
关键修复点说明
- 分离读写流程:先一次性读取所有内容到内存,测试完成后再统一写入,彻底解决读写指针互相干扰的问题,确保能遍历所有单词对。
- 修正核心逻辑:答对的单词对直接丢弃,答错的才加入待写入列表,完全符合“答对删除、答错保留”的需求。
- 处理特殊字符:添加
encoding='utf-8'参数,避免德语中的特殊字符(如ö、ä)出现乱码。 - 增强健壮性:检查每行是否成对存在,避免文件末尾出现单行内容导致的错误。
内容的提问来源于stack exchange,提问作者ALearningSophomore
相关产品推荐
相关产品推荐

