我试图制作一个将文本从网站转换为Anki卡片组的插件,所以现在我有一个格式正确的文本文件,我无法弄清楚如何将其导入到现有的套牌,我检查了官方手册,但它提供了很少的解释,这可能听起来很新手,但这是我第一次使用插件,所以如果有更多经验的人可以给我更详尽的解释,提前谢谢!
这是我试图理解的网站的代码段:
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()
答案 0 :(得分:1)
我认为您正在尝试制作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
,初始化其映射并运行它。