Seite 1 von 1
Liste untereinander in Txt-Datei schreiben
Verfasst: Montag 14. November 2022, 21:25
von Lara99
Guten Abend zusammen,
ich habe ein Programm geschrieben, welches mit Hilfe des Moduls "Duden" für jedes Wort die Synonyme ausgibt. Es sieht folgender Maßen aus:
Code: Alles auswählen
import duden
list = ["Blume", "Garten", "Sonne"]
result = []
for word in list:
w = duden.get(word)
if w is not None:
result.append(word)
result.append(w.synonyms)
print(result)
Als Ergebnis des Programms bekommt man eine Liste (result), die so aussieht:
Code: Alles auswählen
['Blume', ['Blumenstock, Pflanze, Topfblume, Topfpflanze'],
'Garten', ['englischer Garten, Grünanlage, grüne Lunge, Grünfläche'],
'Sonne', ['Sonnenscheibe; (gehoben) Tagesgestirn; (griechische Mythologie) Helios, Helligkeit']]
Ich möchte nun den Inhalt der Liste (result) folgender Maßen in eine Textdatei abspeichern:
Code: Alles auswählen
Blume, Blumenstock, Pflanze, Topfblume, Topfpflanze
Garten , englischer Garten, Grünanlage, grüne Lunge, Grünfläche
Sonne, Sonnenscheibe, (gehoben) Tagesgestirn, (griechische Mythologie) Helios, Helligkeit
Weiß jemand vielleicht wie das geht? Es wäre sehr nett, wenn mir jemand helfen könnte.
Viele Grüße
Lara
Re: Liste untereinander in Txt-Datei schreiben
Verfasst: Montag 14. November 2022, 22:01
von Sirius3
`list` ist der Name der Python-List-Klasse und sollte nicht mit eigenen Werten überdeckt werden. `words` wäre ein viel besserer Variablenname. `w` ist auch ein schlechter Variablenname, weil einbuchstabige Namen nichts aussagen. Laut Dokumentation liefert `get` ein DudenWort-Objekt
Eingerückt wird immer mit 4 Leerzeichen pro Ebene, nicht 8.
Der Aufbau von `results` ist schlecht, weil jeder zweite Eintrag eine andere Bedeutung hat. Besser ist es, word und w.synonyms gemeinsam in einem Tuple `results` hinzuzufügen.
Code: Alles auswählen
import duden
words = ["Blume", "Garten", "Sonne"]
result = []
for word in words:
duden_work = duden.get(word)
if duden_word is not None:
result.append((word, duden_word..synonyms))
print(result)
Was hast Du schon über das Schreiben in Dateien gelernt? An welcher Stelle kommst Du damit konkret nicht weiter?
Nach welcher Regel soll vor dem ersten Komma ein Leerzeichen gesetzt werden und wann nicht?
Re: Liste untereinander in Txt-Datei schreiben
Verfasst: Montag 14. November 2022, 22:40
von Lara99
Sirius3 hat geschrieben: Montag 14. November 2022, 22:01
`list` ist der Name der Python-List-Klasse und sollte nicht mit eigenen Werten überdeckt werden. `words` wäre ein viel besserer Variablenname. `w` ist auch ein schlechter Variablenname, weil einbuchstabige Namen nichts aussagen. Laut Dokumentation liefert `get` ein DudenWort-Objekt
Eingerückt wird immer mit 4 Leerzeichen pro Ebene, nicht 8.
Der Aufbau von `results` ist schlecht, weil jeder zweite Eintrag eine andere Bedeutung hat. Besser ist es, word und w.synonyms gemeinsam in einem Tuple `results` hinzuzufügen.
Code: Alles auswählen
import duden
words = ["Blume", "Garten", "Sonne"]
result = []
for word in words:
duden_work = duden.get(word)
if duden_word is not None:
result.append((word, duden_word..synonyms))
print(result)
Was hast Du schon über das Schreiben in Dateien gelernt? An welcher Stelle kommst Du damit konkret nicht weiter?
Nach welcher Regel soll vor dem ersten Komma ein Leerzeichen gesetzt werden und wann nicht?
Vielen Dank für Deine Antwort

Ich habe jetzt mal das Ergebnis in eine Datei geschrieben durch folgendes Programm:
Code: Alles auswählen
import duden
words = ["Blume", "Garten", "Sonne"]
result = []
for word in words:
duden_word = duden.get(word)
if duden_word is not None:
result.append((word, duden_word.synonyms))
print(result)
with open('result.txt', 'w') as f:
for line in result:
f.write(f"{line}\n")
Das Ergebnis in der Textdatei (result.txt) sieht jetzt so aus:
Code: Alles auswählen
('Blume', ['Blumenstock, Pflanze, Topfblume, Topfpflanze'])
('Garten', ['englischer Garten, Grünanlage, grüne Lunge, Grünfläche'])
('Sonne', ['Sonnenscheibe; (gehoben) Tagesgestirn; (griechische Mythologie) Helios, Helligkeit'])
Allerdings müssten die Sonderzeichen noch weggemacht werden, damit es so aussieht:
Code: Alles auswählen
Blume, Blumenstock, Pflanze, Topfblume, Topfpflanze
Garten, englischer Garten, Grünanlage, grüne Lunge, Grünfläche
Sonne, Sonnenscheibe, (gehoben) Tagesgestirn, (griechische Mythologie) Helios, Helligkeit'
Leider weiß ich aber nicht wie man die Sonderzeichen mit Python wegmachen kann

Re: Liste untereinander in Txt-Datei schreiben
Verfasst: Montag 14. November 2022, 22:58
von Sirius3
Die Repräsentation von Tuple und Listen ist nicht dafür gedacht, dass man sie weiterverarbeitet. Schreibt die Daten gleich richtig in die Datei. `line` ist ja keine Zeile, sondern ein Tuple aus Wort und Synonym-Liste. Das mußt Du also wieder in zwei Variablen speichern, und dann beide Einträge entsprechend formatiert in die Datei schreiben. Um Listeneinträge in einen Komma-Separierten String zu verwandeln, gibt es `join`.
Sind die Synonyme immer eine Liste mit genau einem Eintrag? Das wäre seltsam.
Re: Liste untereinander in Txt-Datei schreiben
Verfasst: Montag 14. November 2022, 23:30
von Lara99
Sirius3 hat geschrieben: Montag 14. November 2022, 22:58
Die Repräsentation von Tuple und Listen ist nicht dafür gedacht, dass man sie weiterverarbeitet. Schreibt die Daten gleich richtig in die Datei. `line` ist ja keine Zeile, sondern ein Tuple aus Wort und Synonym-Liste. Das mußt Du also wieder in zwei Variablen speichern, und dann beide Einträge entsprechend formatiert in die Datei schreiben. Um Listeneinträge in einen Komma-Separierten String zu verwandeln, gibt es `join`.
Sind die Synonyme immer eine Liste mit genau einem Eintrag? Das wäre seltsam.
Achso Dankeschön. Wie macht man das mit den 2 Variablen? Ich habe jetzt versucht die Liste in einen String umzuwandeln. Aber dadurch funktioniert leider jetzt gar nichts mehr richtig.
strng = ''
for i in result:
strng +=str(i)
print (strng)
Re: Liste untereinander in Txt-Datei schreiben
Verfasst: Dienstag 15. November 2022, 08:05
von Sirius3
Warum ist `i` ein besserer Variablenname als `line`? `str` liefert genauso die Repräsentation eines Tuples, wie die Umwandlung innerhalb eines Formatstrings.
Die geläufigste Form beim Verarbeiten von Tuplen in Listen ist das Entpacken direkt im `for`:
Code: Alles auswählen
with open('result.txt', 'w', encoding="utf8") as output:
for word, synonyms in result:
output.write(...)
Re: Liste untereinander in Txt-Datei schreiben
Verfasst: Dienstag 15. November 2022, 10:05
von __blackjack__
Bei `synonyms` scheint das einzige Element immer in einer Liste zu stecken, entgegen der Dokumentation des Moduls wo nur eine einzelne Zeichenkette geliefert wird. Das Modul scraped ja die Duden-Webseite. Vielleicht gab es dort ja Änderungen die noch nicht im Modul berücksichtigt wurden. Folgende Änderung an den Testfällen macht diese Vermutung wahrscheinlich:
https://github.com/radomirbosak/duden/c ... 3e84764cbc
Re: Liste untereinander in Txt-Datei schreiben
Verfasst: Dienstag 15. November 2022, 12:14
von __blackjack__
Ergänzend: Beim öffnen der Textdatei sollte man explizit eine Kodierung angeben. UTF-8 würde sich anbieten, weil man ja nicht weiss was die Webseite vom Duden da am Ende alles in den Text packt.
Und falls das eine Zeile pro Wort werden soll, würde ich auch noch mal explizit testen ob in den Daten selbst keine Zeilenendezeichen vorkommen.