我正在尝试制作一个可将网站中的文本转换为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
,初始化其映射并运行它。