Seite 1 von 1
Jedes Wort aus .txt-Datei in eine eigene Zeile schreiben
Verfasst: Montag 10. Dezember 2018, 10:44
von Rotkehlchen
Hallo liebes Forum,
denke der Betreff sagt schon fast alles: ich habe ein Textdokument, aus dem jede Zeichenkette ausgelesen und in eine eigene Zeile geschrieben werden soll. Habe es u. a. so probiert, falls jemand was zum Lachen braucht:
Code: Alles auswählen
with open("privat\Quelle.txt") as lines:
lines.replace(' ', '\n')
# ...hätte ich mir schon fast gedacht:
Traceback (most recent call last):
File "<pyshell#20>", line 2, in <module>
lines.replace(' ', '\n')
AttributeError: '_io.TextIOWrapper' object has no attribute 'replace'
Danke für jeden Tipp!
Re: Jedes Wort aus .txt-Datei in eine eigene Zeile schreiben
Verfasst: Montag 10. Dezember 2018, 11:09
von Rotkehlchen
So das war mal wieder Trick 17: wenn du nicht weißt, was du machen sollst, frag jemanden und dir wird die Antwort selbst einfallen

Das ist der funktionierende Code, den ich mir inzwischen überlegt habe:
Code: Alles auswählen
quelle = open (Quelldatei,'r')
ziel = open (Zieldatei, 'w')
zeilen = quelle.readlines()
zeile = 0
while zeile < len(zeilen):
aktuelleZeile = zeilen[zeile]
wörterinaktuellerZeile = aktuelleZeile.split(' ')
for wort in wörterinaktuellerZeile:
ziel.write(wort + '\n')
zeile += 1
quelle.close()
ziel.close()
Re: Jedes Wort aus .txt-Datei in eine eigene Zeile schreiben
Verfasst: Montag 10. Dezember 2018, 11:19
von __deets__
Auch wenn es geht, ist es doch etwas holperig.
Statt muehselig mit Indizes in die Liste zu arbeiten, macht man das ganz einfach mit
Code: Alles auswählen
with open(quelldatei, "r") as quelle, open(zieldatei, "w") as ziel:
for line in quelle:
ziel.writelines("\n".join(line.strip().split()))
Du solltest immer with benutzen um dir das explizite schliessen der Datei zu sparen, und gleichzeitig sicher zu sein, dass es geht. Und du brauchst keinen Index bei Dingen, ueber die man iterieren kann. Erst recht nicht mit while, wo du selbst den Zaehler baust. Das waere *wenn* besser mit
erledigt - aber auch das ist ein Anti-Pattern wenn man danach noch nur auf eine Datenstruktur zugreift, die man gleich iterieren koennte.
Re: Jedes Wort aus .txt-Datei in eine eigene Zeile schreiben
Verfasst: Dienstag 11. Dezember 2018, 14:20
von Rotkehlchen
Hallo __deets__,
erst mal vielen Dank für Deine Hilfe!
Da ich mich aber weder mit dem writelines()- noch mit dem join()- oder strip()-Befehl auskenne, weiß ich nicht, wie ich bei Deiner Version verhindern kann, dass ich die ursprünglichen Zeilenumbrüche lösche. Denn wenn ich Deinen Code ausführe, werden zwar einwandfrei aus den Leerzeichen Zeilenumbrüche gemacht, bestehende Zeilenumbrüche verschwinden jedoch völlig und so werden jeweils die letzten und ersten Wörter eines Absatzes ohne Trennung zusammengeschrieben.
Ich werde mal versuchen, eine Lösung hierfür zu finden.
Re: Jedes Wort aus .txt-Datei in eine eigene Zeile schreiben
Verfasst: Dienstag 11. Dezember 2018, 14:42
von ArtooDetoo
Rotkehlchen hat geschrieben: Dienstag 11. Dezember 2018, 14:20Da ich mich aber weder mit dem writelines()- noch mit dem join()- oder strip()-Befehl auskenne, weiß ich nicht, wie ich bei Deiner Version verhindern kann, dass ich die ursprünglichen Zeilenumbrüche lösche.
Zum Glück sind die Befehle dokumentiert
https://docs.python.org/3/library/stdty ... #str.split
https://docs.python.org/3/library/io.ht ... writelines
https://docs.python.org/3/library/stdty ... #str.strip
Re: Jedes Wort aus .txt-Datei in eine eigene Zeile schreiben
Verfasst: Dienstag 11. Dezember 2018, 14:52
von __deets__
Rotkehlchen hat geschrieben: Dienstag 11. Dezember 2018, 14:20
Hallo __deets__,
erst mal vielen Dank für Deine Hilfe!
Da ich mich aber weder mit dem writelines()- noch mit dem join()- oder strip()-Befehl auskenne, weiß ich nicht, wie ich bei Deiner Version verhindern kann, dass ich die ursprünglichen Zeilenumbrüche lösche. Denn wenn ich Deinen Code ausführe, werden zwar einwandfrei aus den Leerzeichen Zeilenumbrüche gemacht, bestehende Zeilenumbrüche verschwinden jedoch völlig und so werden jeweils die letzten und ersten Wörter eines Absatzes ohne Trennung zusammengeschrieben.
Ich werde mal versuchen, eine Lösung hierfür zu finden.
Das ist natuerlich nicht so gewollt von mir - aber einfach das strip weglassen, und das letzte Wort einer Zeile hat halt sein \n noch dabei. Alternativ einfach ein "" an die Liste aus dem split anghaengen, dann erledigt das join das automatisch mit.
Re: Jedes Wort aus .txt-Datei in eine eigene Zeile schreiben
Verfasst: Dienstag 11. Dezember 2018, 15:26
von Rotkehlchen
Okay, danke ArtooDetoo!
Ich habe mir überlegt, dass das Problem daher rühren könnte, dass split() bei Leerzeichen und Umbrüchen trennt, und wollte das mit einer Regular Expression beheben... leider liefert mir der überarbeitete Code genau dasselbe Ergebnis:
Code: Alles auswählen
import re
with open(quelldatei, "r") as quelle, open(zieldatei, "w") as ziel:
for line in quelle:
ziel.writelines("\n".join(re.split('\n| ', line.strip())))
Re: Jedes Wort aus .txt-Datei in eine eigene Zeile schreiben
Verfasst: Dienstag 11. Dezember 2018, 15:35
von Rotkehlchen
@ __deets__ sorry hab Deine Antwort übersehen. Wenn ich das strip weglasse, ändert sich gar nichts am Ergebnis.
Und das mit dem "" anhängen meinst Du vermutlich nicht so oder?
Code: Alles auswählen
with open(quelldatei, "r") as quelle, open(zieldatei, "w") as ziel:
for line in quelle:
ziel.writelines("\n".join(line.strip().split().append("")))
Re: Jedes Wort aus .txt-Datei in eine eigene Zeile schreiben
Verfasst: Dienstag 11. Dezember 2018, 16:01
von __deets__
Nein, sonder split liefert dir doch eine Liste. Und aus einer Liste + einer anderen Liste macht man eine neue Liste. Und mit einem Leeren String in einer zweiten Liste, die du mit der Liste aus dem split verbindest, erzeugst du deine extra Leerzeile.