Как программно импортировать текстовый файл в 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()
2 ответа
Насколько я понимаю, вы пытаетесь создать дополнение к Anki 2.0. Я настоятельно рекомендую вместо этого сделать надстройку Anki 2.1, так как она более чистая, имеет больше возможностей для разработки и использует Python 3.
Кроме этого, вот объяснение кода:
Это импортируетfrom anki.importing import TextImporter
TextImporter
Класс в пространство имен модуля дополнения.
Это довольно очевидно. Назначение пути к файлу 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"
тип. Типы заметок называются "моделями" внутри кода.'mid'
это идентификатор модели.
Ну, это первый раз, когда я понял, что это сделал Анки. По какой-то причине вам также необходимо установить идентификатор колоды модели (типа карты) для текущей колоды. Я полагаю, это из-за того, как# 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
, инициализируйте его отображение и запустите его.
Anki теперь позволяет вам определять определенные заголовки в начале текстовых файлов для импорта.
Определение колоды, в которую вы хотите импортировать любой текстовый файл, — это доступный заголовок.
Например
compsci.txt:
#deck:compsci::algorithms
#notetype:algorithm
... more headers
Binary Search ; An algorithm that finds the target value within a <a>sorted</a> array.
... more anki card entries
Это будет импортировано в мою колоду «алгоритмов», которая является подколодой моей колоды «компакт».
Если бы у вас была только одна колода верхнего уровня, это было бы так:
#deck:compsci
#notetype:...
...
Вот документация по этой функции:https://docs.ankiweb.net/importing/text-files.html#file-headers .