Как программно импортировать текстовый файл в 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 Класс в пространство имен модуля дополнения.
  • 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
    
    Ну, это первый раз, когда я понял, что это сделал Анки. По какой-то причине вам также необходимо установить идентификатор колоды модели (типа карты) для текущей колоды. Я полагаю, это из-за того, как 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 .

Другие вопросы по тегам