Files
CSV2ANKI/mp3/csv2anki_mp3.py
2025-06-29 16:10:14 +02:00

91 lines
2.5 KiB
Python

import genanki
import csv, os, random
# Variablen
csv_datei = "LZMP3.csv" # CSV-Datei mit Fragen, Antworten und Audio-Dateien
ausgabe_datei = "LZMP3.apkg" # Name der Ausgabedatei
media_files = [] # Liste der Medien (MP3-Dateien)
# Eindeutige IDs
deck_id = 123456789
model_id = 987654321
# Deck erstellen
deck_name = "LZ mit MP3"
my_deck = genanki.Deck(deck_id, deck_name)
# Anki-Modell mit Audio-Unterstützung
my_model = genanki.Model(
model_id,
"Audio-Karten-Modell",
fields=[
{"name": "Frage"},
{"name": "Antwort"},
{"name": "Audio"},
],
templates=[
{
"name": "Standard-Karte mit Audio",
"qfmt": "{{Frage}}",
"afmt": '{{FrontSide}}<hr id="answer">{{Antwort}}<br>{{Audio}}',
},
],
css="""
.card {
font-family: Arial, sans-serif;
font-size: 20px;
text-align: center;
color: black;
background-color: white;
}
""",
)
notes = [] # Liste für Notizen
karten_anzahl = 0
with open(csv_datei, "r", encoding="utf-8") as file:
reader = csv.reader(file, delimiter=";")
next(reader) # Kopfzeile überspringen
for i, row in enumerate(reader, start=2):
if len(row) < 2: # Mindestens zwei Spalten notwendig
print(f"Warnung: Zeile {i} hat zu wenige Spalten und wird übersprungen: {row}")
continue
frage, antwort = row[:2]
audio_datei = row[2].strip() if len(row) > 2 else ""
# MP3-Datei zur Medienliste hinzufügen, falls vorhanden
if audio_datei and os.path.exists(audio_datei):
media_files.append(audio_datei)
audio_html = f'[sound:{os.path.basename(audio_datei)}]' # MP3-Datei in Anki-Format
else:
audio_html = "" # Kein Audio
# Notiz erstellen und in Liste speichern
note = genanki.Note(
model=my_model,
fields=[frage.strip(), antwort.strip(), audio_html],
tags=["Audio"],
)
notes.append(note)
karten_anzahl += 1
if karten_anzahl == 0:
print("Fehler: Es wurden keine Karten erstellt. Überprüfe die CSV-Datei.")
else:
print(f"{karten_anzahl} Karten erfolgreich erstellt.")
# Notizen zufällig mischen
random.shuffle(notes)
# Gemischte Notizen zum Deck hinzufügen
for note in notes:
my_deck.add_note(note)
# Stapel exportieren mit Medien
package = genanki.Package(my_deck)
package.media_files = media_files # Medien hinzufügen
package.write_to_file(ausgabe_datei)
print(f"Stapel wurde erfolgreich unter '{ausgabe_datei}' gespeichert!")