Seite 1 von 1
Wie Textdatei ohne Sonderzeichen schreiben
Verfasst: Mittwoch 15. Juli 2020, 12:16
von KlausP
Habe nun eine Weile probiert, aber verstehe wohl grundlegende Dinge nicht.
Ich habe eine Textdatei als Input.
Da habe ich einige Wörter eingefügt, wie z.B.
KATZE
HUND
BIENE
Diese Wörter sollen sortiert werden (später auch upcase und mehrfache eliminieren)
Und wieder in eine neue Textdatei geschrieben werden
Problem 1:
Die Liste produziert unerwünschte Sonderzeichen wie [, ], ', \n
Problem 2:
während der Ausgabe versuche ich die Sonderzeichen zu unterdrücken.
Obwohl ich "\n" zweimal mit "" ersetze, generiert das Programm
BIENE\n\n
Problem 3:
Tatsächlich wird wird zusätzlich noch ein "\" vorangesetzt >> BIENE\\n\n
Das "\" kann ich nicht unterdrücken; ich erhalte dann eine EoL Warnung
Wie kann ich
BIENE
HUND
KATZE
zeilenmässig ausgeben ohne in Windows sichtbare Sonderzeichen?
Frage 4:
falls die Textdatei die Grüße eines Wörterbuchs mit vllt. 100 kB erreichen sollte, klappt dann das Sortieren der Liste im Speicher noch?
Ich häng mal mein Programm hier an:
datalist = []
inputfile = open("E:\woerter3.txt", "r")
for line in inputfile:
datalist.append([line])
inputfile.close()
# sortieren
datalist.sort()
# listenstring = ",".join(datalist)
# Speichern
outputfile = open("E:\woerter4.txt", "w")
for line in datalist:
linestr = str(line)
if "'" in linestr:
linestr = linestr.replace("'", "")
if "[" in linestr:
linestr = linestr.replace("[", "")
if "]" in linestr:
linestr = linestr.replace("]", "")
if "\n" in linestr:
linestr = linestr.replace("\n", "")
if "\n" in linestr:
linestr = linestr.replace("\n", "")
print(linestr)
# outputfile.write(linestr)
outputfile.close()
Re: Wie Textdatei ohne Sonderzeichen schreiben
Verfasst: Mittwoch 15. Juli 2020, 12:24
von Sirius3
Eingerückt wird immer mit 4 Leerzeichen pro Ebene, nicht mal 3 und mal 4.
Dateien öffnet man mit dem with-Statement, damit sie auch garantiert wieder geschlossen werden. Jede Zeile hat ein Zeile-Ende-Zeichen, das man normalerweise beim Einlesen wegstrippen möchte. \ als Pfadtrenner muß escaped werden. Text-Dateien sollten immer mit einem expliziten Encoding geöffnet werden.
Code: Alles auswählen
with open("E:\\woerter3.txt", encoding="ASCII") as lines:
woerter = [line.strip() for line in lines]
Warum steckst Du jede Zeile in eine Liste? Das macht bei Dir doch nur alles komplizierter.
Die String-Repräsentation einer Liste ist nicht für die Weiterverarbeitung gedacht. Wenn Du an erster Stelle gar keine unnötigen Listen erzeugst, bleibt für den Rest:
Code: Alles auswählen
woerter.sort()
with open("E:\\woerter4.txt", "w", encoding="ASCII") as output:
for wort in woerter:
print(wort)
output.write(f"{wort}\n")
Re: Wie Textdatei ohne Sonderzeichen schreiben
Verfasst: Mittwoch 15. Juli 2020, 14:00
von KlausP
vielen Dank für die schnelle Antwort, Sirius.
Einige Syntax muss ich noch verarbeiten, da will ich jetzt nicht fragen
Hier ein Auszug meiner Quelldatei:
wohin
zu\n
ÄSTE\n
ändern
Ich habe bei der Ausgabe versucht, die gelegentlichen \n zu entfernen
for wort in woerter:
if "\n" in wort:
wort = wort.replace("\n", "")
Leider klappt das nicht.
Da im Source Umlaute vorkommen, geht ASCII nicht; ich habe "cp1252" probiert, aber die Umlautworte stehen weiterhin am Ende
Re: Wie Textdatei ohne Sonderzeichen schreiben
Verfasst: Mittwoch 15. Juli 2020, 14:04
von KlausP
bei meinem Kommentar wurden leider die Idents entfernt.
... steht sicherlich in den Regeln, die ich nicht gelesen habe

Re: Wie Textdatei ohne Sonderzeichen schreiben
Verfasst: Mittwoch 15. Juli 2020, 14:05
von Jankie
Dafür ist ja .strip() da. Da musst du nichts mehr mit replace machen.
Angenommen du hast folgende Liste:
Code: Alles auswählen
BIENE
HUND
KATZE
BIENE
HUND
KATZE
BIENE
HUND
KATZE
BIENE
HUND
KATZE
und die liest du mit dem Code von Sirius3 ein (Kodierung musst du wissen, evtl. UTF-8?), dann kommt folgende Liste raus:
Code: Alles auswählen
['BIENE', 'HUND', 'KATZE', 'BIENE', 'HUND', 'KATZE', 'BIENE', 'HUND', 'KATZE', 'BIENE', 'HUND', 'KATZE']
Dort sind dann alle Zeilenumbrüche schon raus. Beim Zurückschreiben in die Datei musst du die natürlich wieder anhängen. Dafür hat Sirius3 aber auch schon Code geliefert.
Zur Einrückung:
Du musst im vollständigen Editor auf das </> Symbol klicken und den Code zwischen die Code-Tags packen.
Re: Wie Textdatei ohne Sonderzeichen schreiben
Verfasst: Mittwoch 15. Juli 2020, 14:46
von KlausP
@Jankie
strip() geht leider nicht.
"\n" bedeutet "newline"
ich suche aber nach "\" + "newline"
da geht replace("\\nl", "") sehr gut
Re: Wie Textdatei ohne Sonderzeichen schreiben
Verfasst: Mittwoch 15. Juli 2020, 15:46
von Sirius3
Was geht genau nicht? Was hast Du versucht, wie sieht der Code aus, und wie ist die komplette Fehlermeldung?
Re: Wie Textdatei ohne Sonderzeichen schreiben
Verfasst: Mittwoch 15. Juli 2020, 16:17
von __blackjack__
@KlausP: Ja "\n" bedeutet ”newline” aber ``replace("\\n", "")`` bedeutet nicht das ”newlines” ersetzt werden, sondern das die Zeichen \ gefolgt von n ersetzt werden, und das ist kein ”newline” sondern eben genau diese beiden Zeichen, ein \ gefolgt von einem n. Das bekommt man durch `strip()` ohne Argumente natürlich nicht weg, aber das sollte da auch überhaupt gar nicht in der Zeichenkette stehen wenn man vorher nicht schon einen Fehler gemacht hat. Und *den* Fehler solltest Du besser beheben als hinterher mit üblen Hacks an den Symptomen herumzudoktorn.
Re: Wie Textdatei ohne Sonderzeichen schreiben
Verfasst: Mittwoch 15. Juli 2020, 16:31
von KlausP
@ Sirius3
habe irgendwie meine Antwort ins Nirwana gesendet; aber blackjack hat ja nun inzwischen geantwortet und erklärt
@ blackjack
ich hatte meine Sourcedatei verwurschtelt; immerhin an die 500 Wörter:
das wollte ich nicht manuell bereinigen; das Programm macht das viel schneller

Re: Wie Textdatei ohne Sonderzeichen schreiben
Verfasst: Mittwoch 15. Juli 2020, 17:33
von Sirius3
@KlausP: dann mußt Du Dein Problem korrekt beschreiben, also wie sieht die Eingabedatei aus, und wie ist der gewünschte Output.
Re: Wie Textdatei ohne Sonderzeichen schreiben
Verfasst: Mittwoch 15. Juli 2020, 19:26
von __blackjack__
@KlausP: ”Manuell” heisst ja mit einem Editor. Für einmaliges reparieren reicht das oft und geht bei vielem auch schneller als wenn man ein Programm dafür schreiben würde. Suchen und ersetzen kann man ja auch im Editor.
Re: Wie Textdatei ohne Sonderzeichen schreiben
Verfasst: Mittwoch 15. Juli 2020, 21:30
von KlausP
@Sirius3: Hier ein Auszug meiner Quelldatei:
wohin
zu\n
ÄSTE\n
ändern
gewünschter Output ist:
wohin
zu
ÄSTE
ändern
Aber das Problem ist ja inzwischen gelöst. S. meine Antwort von 15:46 an Jankie
... da geht replace ("\\nl", "") sehr gut
@ alle: habe aber noch ein schwieriges logische Problem zu knacken; ich versuch aber erstmal selber
und vielen Dank für eure super Hilfe, heute