我可以从 .CSV 文件创建 Anki 卡片吗?

我可以从 .CSV 文件创建 Anki 卡片吗?

我可以将我的 CSV 文件转换为 Anki 卡片组吗?我在程序中找不到任何选项。

答案1

桌面安基版本将允许您导入“用制表符或分号分隔的文本。”使用此选项选择您的 CSV 文件。打开文件后,您将看到一个对话框,允许您自定义如何导入数据。其中一个设置是允许您选择分隔符的选项。将其更改为逗号,它应该适合您。

屏幕截图:将 CSV 文件导入 Anki

答案2

生成.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'],您就可以导入数据库并更新不会失去进度

我的生产代码示例:

答案3

Anki API

继续gavenkoa 的回答,Anki API 具有从 CSV 导入的内置功能。

首先,你可以使用 pip 安装 anki Python 包,例如

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

官方的 Anki python API 记录在这里: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,以及更自由的许可证。

相关内容