2

我正在尝试制作一个插件,将网站上的文本转换为 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()
4

1 回答 1

3

我认为您正在尝试制作 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,初始化它的映射并运行它。
于 2018-06-20T16:28:25.343 回答