如何以编程方式将文本文件导入anki?
how to programmatically import text file into anki?
我正在尝试制作一个插件,将网站上的文本转换为 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()
我认为您正在尝试制作 Anki 2.0 附加组件。我强烈建议您改用 Anki 2.1 附加组件,因为它更干净,具有更多开发功能并使用 Python 3.
除此之外,这里是对代码的解释:
from anki.importing import TextImporter
这会将 TextImporter
class 导入到附加模块的命名空间中。
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"
类型。注释类型在代码中称为 "models"。 '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
,初始化它的映射并 运行 它。
我正在尝试制作一个插件,将网站上的文本转换为 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()
我认为您正在尝试制作 Anki 2.0 附加组件。我强烈建议您改用 Anki 2.1 附加组件,因为它更干净,具有更多开发功能并使用 Python 3.
除此之外,这里是对代码的解释:
这会将from anki.importing import TextImporter
TextImporter
class 导入到附加模块的命名空间中。
这是不言自明的。它将 Unicode 文件路径分配给变量file = u"/path/to/text.txt"
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"
类型。注释类型在代码中称为 "models"。'mid'
是模型标识符。
好吧,那是我第一次意识到 Anki 做到了那个。出于某种原因,您还需要将模型(卡片类型)的牌组标识符设置为当前牌组的。我想这是因为# and puts cards in the last deck used by the note type m['did'] = did
TextImporter
的工作原理。
创建一个# import into the collection ti = TextImporter(mw.col, file) ti.initMapping() ti.run()
TextImporter
,初始化它的映射并 运行 它。