Initial commit
This commit is contained in:
91
mp3/csv2anki_mp3.py
Normal file
91
mp3/csv2anki_mp3.py
Normal file
@@ -0,0 +1,91 @@
|
||||
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!")
|
||||
Reference in New Issue
Block a user