求助:实现交替读取文本行生成Anki笔记的Python脚本问题
解决Anki笔记正反内容重复的问题
我来帮你搞定这个问题!你的代码目前每次循环都会把当前行同时赋值给front和back,这就导致生成的笔记正面和背面完全一样,而且每一行都生成了一个单独的笔记,不符合你“两行一组生成笔记”的需求。
我们可以通过两种常见的方式实现交替取行的逻辑:
方法1:使用迭代器逐行获取
这种方式比较简洁,利用Python迭代器的next()方法来成对获取行:
def build(): with codecs.open("Sentences.txt", 'r', encoding='utf_8') as fileopen: collection = [] lines_iter = iter(fileopen) # 将文件对象转为迭代器 while True: try: # 依次获取正面和背面的行,strip()去除换行符和首尾空白 front = next(lines_iter).strip() back = next(lines_iter).strip() except StopIteration: # 没有更多行时退出循环 break # 生成笔记并加入集合 ex_note = Note(model=ex_model, fields=[front, back]) collection.append(ex_note) return collection
逻辑说明:
- 把文件对象转为迭代器后,每次调用
next()就能获取下一行 - 用
try-except捕获StopIteration异常,当迭代器没有剩余行时终止循环 - 每获取两行就生成一个笔记,完美实现“一行正面、一行背面”的需求
方法2:用行号判断分组
如果你习惯用索引来跟踪位置,可以用enumerate获取行号,通过奇偶性来区分正面和背面:
def build(): with codecs.open("Sentences.txt", 'r', encoding='utf_8') as fileopen: collection = [] front = "" for line_num, line in enumerate(fileopen): cleaned_line = line.strip() if line_num % 2 == 0: # 偶数行号(0、2、4...)作为笔记正面 front = cleaned_line else: # 奇数行号作为笔记背面,此时生成完整笔记 ex_note = Note(model=ex_model, fields=[front, cleaned_line]) collection.append(ex_note) front = "" # 清空正面内容,准备下一组 return collection
逻辑说明:
enumerate会返回行号(从0开始)和对应的行内容- 偶数行号的内容暂存为
front,遇到奇数行号时,就和之前的front组成笔记 - 生成笔记后清空
front,确保下一组的正面是新的内容
原代码的问题点回顾:
- 每次循环都把当前行同时赋值给
front和back,导致正反内容完全一致 - 每一行都生成了一个笔记,而不是两行一组生成
- 清空
front和back的方式front.replace(front,"")没必要,直接赋值front = ""就足够简洁高效
内容的提问来源于stack exchange,提问作者Hodala22
相关产品推荐
相关产品推荐

