91 lines
2.5 KiB
Python
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!") |