43 votes

Est-ce que je peux créer un paquet Anki à partir d'un fichier .CSV?

Puis-je convertir mon fichier CSV en un deck Anki? Je ne trouve pas d'options dans le programme.

38voto

La version Anki pour ordinateur 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, vous verrez une boîte de dialogue qui vous permet de personnaliser l'importation de vos données. L'un des paramètres est une option qui vous permet de choisir le délimiteur. Changez-le pour une virgule, et cela devrait fonctionner pour vous.

Capture d'écran : Importer un fichier CSV dans Anki

17voto

gavenkoa Points 1652

Une autre façon de générer des fichiers .apkg est de réutiliser le bureau version avec Python. Prolonger :

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

Ensuite, vous pouvez adapter l'exemple suivant à 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'] = '{{en}}'
tmpl['afmt'] = '{{FrontSide}}\n\n\n\n{{ru}}'
collection.models.addTemplate(model, tmpl)
tmpl = collection.models.newTemplate('ru -> en')
tmpl['qfmt'] = '{{ru}}'
tmpl['afmt'] = '{{FrontSide}}\n\n\n\n{{en}}'
collection.models.addTemplate(model, tmpl)

model['id'] = 12345678  # essentiel pour la détection de mise à niveau
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)

Aussi longtemps que vous gardez note.guid et model['id'] le même, vous pouvez importer la DB et mettre à jour les cartes sans perdre de progression !

exemples de mon code de production :

1voto

bmaupin Points 268

Anki API

Pour compléter la réponse de gavenkoa, l'API Anki dispose d'une fonctionnalité intégrée pour importer depuis un fichier CSV.

Tout d'abord, vous pouvez installer le package anki en Python en utilisant pip, par exemple

pip3 install anki protobuf

Voici un exemple très basique pour importer depuis un fichier CSV et exporter un deck vers un fichier de package Anki (.apkg) :

import anki
from anki.exporting import AnkiPackageExporter
from anki.importing.csvfile import TextImporter

# Créer une nouvelle collection
collection = anki.Collection('/chemin/vers/test.anki2'))

# Créer un nouveau deck dans la collection (sinon le deck "Default" sera utilisé)
deck_id = collection.decks.id('Nom du deck')
model = collection.models.byName('Basic')
model['did'] = deck_id
collection.models.save(model)

# Importer des cartes depuis un CSV dans la nouvelle collection
importateur = TextImporter('/chemin/vers/test.csv'))
importateur.initMapping()
importateur.run()

# Sauvegarder et exporter la collection vers un fichier de package Anki (.apkg)
collection.save()
exportateur = AnkiPackageExporter(collection)
exportateur.exportInto('/chemin/vers/test.apkg'))

Un exemple plus détaillé est disponible ici : https://github.com/bmaupin/flashcard-sets/blob/main/scripts/csv-to-apkg.py

L'API officielle d'Anki en Python est documentée ici : https://addon-docs.ankiweb.net/getting-started.html

La documentation officielle n'est pas exhaustive, mais j'ai également documenté un peu moi-même : https://github.com/bmaupin/flashcard-sets/tree/main/scripts#anki-api

Lors de l'utilisation de l'API, il est également utile d'être familiarisé avec certains des concepts de base : https://docs.ankiweb.net/getting-started.html#key-concepts

Genanki

Une autre option est d'utiliser ce package : https://github.com/kerrickstaley/genanki

Il n'est pas officiellement affilié au projet Anki mais semble avoir une API plus propre et mieux documentée, en plus d'une licence plus libérale.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X