web-dev-qa-db-fra.com

Puis-je créer une terrasse Anki à partir d'un fichier .CSV?

Puis-je convertir mon fichier CSV en un deck Anki? Je ne trouve aucune option dans le programme.

27
Thalecress

La version de bureau Anki vous permettra d'importer " du texte séparé par des tabulations ou des points-virgules ." Utilisez cette option pour choisir votre fichier CSV. Après avoir ouvert le fichier, une boîte de dialogue vous permettant de personnaliser la manière dont vos données sont importées apparaît. L'un des paramètres est une option qui vous permet de choisir le délimiteur. Changez-le en une virgule et cela devrait fonctionner pour vous.

Screenshot: Importing a CSV file into Anki

25
nispio

Une autre façon de générer un fichier .apkg par programme en réutilisant la version de bureau avec Python. Étendre:

PYTHONPATH=/usr/share/anki: python ...

et lancez le script (bien sûr, vous devez l’adapter à vos besoins):

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)

Tant que vous gardez note.guid et model['id'] identiques, vous pouvez importer une base de données avec en mettant à jour des cartes sans perdre la progression !

Mes exemples de code de production:

6
gavenkoa