Могу ли я создать колоду Anki из файла.CSV?
Могу ли я конвертировать мой CSV-файл в колоду Anki? Я не могу найти какие-либо варианты в программе.
3 ответа
Настольная версия Anki позволит вам импортировать "текст, разделенный табуляцией или точкой с запятой". Используйте эту опцию, чтобы выбрать файл CSV. После открытия файла вам будет предложено диалоговое окно, в котором вы сможете настроить импорт ваших данных. Одной из настроек является опция, позволяющая выбрать разделитель. Измените это на запятую, и это должно работать для вас.
Еще один способ создания .apkg
файл программно путем повторного использования настольной версии с Python. Расширение:
PYTHONPATH=/usr/share/anki: python ...
и запустите скрипт (конечно, вы должны адаптировать его к вашим потребностям):
import anki
from anki.exporting import AnkiPackageExporter
collection = anki.Collection(os.path.join(TMPDIR, 'collection.anki2'))
deck_id = collection.decks.id(FBASENAME + "_deck")
deck = collection.decks.get(deck_id)
model = collection.models.new(FBASENAME + "_model")
model['tags'].append(FBASENAME + "_tag")
model['did'] = deck_id
model['css'] = """
.card {
font-family: arial;
font-size: 20px;
text-align: center;
color: black;
background-color: white;
}
.from {
font-style: italic;
}
"""
collection.models.addField(model, collection.models.newField('en'))
collection.models.addField(model, collection.models.newField('ru'))
tmpl = collection.models.newTemplate('en -> ru')
tmpl['qfmt'] = '<div class="from">{{en}}</div>'
tmpl['afmt'] = '{{FrontSide}}\n\n<hr id=answer>\n\n{{ru}}'
collection.models.addTemplate(model, tmpl)
tmpl = collection.models.newTemplate('ru -> en')
tmpl['qfmt'] = '{{ru}}'
tmpl['afmt'] = '{{FrontSide}}\n\n<hr id=answer>\n\n<div class="from">{{en}}</div>'
collection.models.addTemplate(model, tmpl)
model['id'] = 12345678 # essential for upgrade detection
collection.models.update(model)
collection.models.setCurrent(model)
collection.models.save(model)
note = anki.notes.Note(collection, model)
note['en'] = "hello"
note['ru'] = u"[heləʊ]\nint. привет"
note.guid = "xxx1"
collection.addNote(note)
note = collection.newNote()
note['en'] = "bye"
note['ru'] = u"[baɪ]\nint. пока"
note.guid = "xxx2"
collection.addNote(note)
export = AnkiPackageExporter(collection)
export.exportInto(FONAME)
Пока вы держите note.guid
а также model['id']
Так же вы можете импортировать БД с обновлением карт без потери прогресса!
- Любой способ собрать apkg из командной строки без графического интерфейса?
- Можно ли объединить улучшения и исправления в карты во время импорта apkg без потери прогресса?
Примеры моего производственного кода:
Анки API
В дополнение к ответу Гавенкоа API Anki имеет встроенную функцию импорта из CSV.
Прежде всего, вы можете установить пакет anki Python с помощью pip, например
pip3 install anki protobuf
Вот очень простой пример импорта из CSV и экспорта колоды в файл пакета Anki (.apkg):
import anki
from anki.exporting import AnkiPackageExporter
from anki.importing.csvfile import TextImporter
# Create a new collection
collection = anki.Collection('/path/to/test.anki2'))
# Create a new deck in the collection (otherwise the "Default") deck will be used
deck_id = collection.decks.id('Deck name')
model = collection.models.byName('Basic')
model['did'] = deck_id
collection.models.save(model)
# Import cards from CSV into the new collection
importer = TextImporter('/path/to/test.csv'))
importer.initMapping()
importer.run()
# Save and export the collection to an Anki package (.apkg) file
collection.save()
exporter = AnkiPackageExporter(collection)
exporter.exportInto('/path/to/test.apkg'))
Более подробный пример здесь: https://github.com/bmaupin/flashcard-sets/blob/main/scripts/csv-to-apkg.py .
Официальный API Python Anki описан здесь: https://addon-docs.ankiweb.net/getting-started.html .
Официальная документация не является полной, но я также немного ее задокументировал: https://github.com/bmaupin/flashcard-sets/tree/main/scripts#anki-api
При использовании API также полезно ознакомиться с некоторыми основными понятиями: https://docs.ankiweb.net/getting-started.html#key-concepts .
Генанки
Другой вариант — использовать этот пакет: https://github.com/kerrickstaley/genanki .
Он официально не связан с проектом Anki, но, похоже, имеет более чистый и хорошо документированный API в дополнение к более либеральной лицензии.