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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 17:45:47