我正在尝试制作一个可将网站中的文本转换为Anki卡座的插件,因此现在我有一个格式正确的文本文件,我不知道如何将其导入到现有卡座中,我检查了官方手册,但提供的解释很少,这听起来很新手,但这是我第一次使用Addon,因此,如果有更多经验的人可以给我更详尽的解释,请提前感谢!

这是我试图了解的网站代码段:

from anki.importing import TextImporter
file = u"/path/to/text.txt"
# select deck
did = mw.col.decks.id("ImportDeck")
mw.col.decks.select(did)
# anki defaults to the last note type used in the selected deck
m = mw.col.models.byName("Basic")
deck = mw.col.decks.get(did)
deck['mid'] = m['id']
mw.col.decks.save(deck)
# and puts cards in the last deck used by the note type
m['did'] = did
# import into the collection
ti = TextImporter(mw.col, file)
ti.initMapping()
ti.run()

最佳答案

我认为您正在尝试制作Anki 2.0附加组件。我强烈建议您改用Anki 2.1附加组件,因为它更干净,具有更多开发功能并使用Python 3。

除此之外,这是代码的说明:


from anki.importing import TextImporter


这会将TextImporter类导入到附加​​模块的名称空间中。
file = u"/path/to/text.txt"


这是不言自明的。它将Unicode文件路径分配给变量file。在Anki 2.1中,它可能只是file = "/path/to/text.txt",因为在Python 3中字符串表示文本,而不是字节数组。
# select deck
did = mw.col.decks.id("ImportDeck")
mw.col.decks.select(did)


这将选择标识符为"ImportDeck"的牌组。您需要mw,可以通过from aqt import mw获得。
# anki defaults to the last note type used in the selected deck
m = mw.col.models.byName("Basic")
deck = mw.col.decks.get(did)
deck['mid'] = m['id']
mw.col.decks.save(deck)


这会将(当前选定的卡座)的音符类型更改为"Basic"类型。注释类型在代码内称为“模型”。 'mid'是型号标识符。
# and puts cards in the last deck used by the note type
m['did'] = did


好吧,那是我第一次意识到Anki做到了。由于某些原因,您还需要将模型(卡类型)的牌组标识符设置为当前牌组的牌组标识符。我想那是因为TextImporter是如何工作的。
# import into the collection
ti = TextImporter(mw.col, file)
ti.initMapping()
ti.run()


创建一个TextImporter,初始化其映射并运行它。

10-04 15:41