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()
Wie Textdatei ohne Sonderzeichen schreiben
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.
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:
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]
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")
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
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
Dafür ist ja .strip() da. Da musst du nichts mehr mit replace machen.
Angenommen du hast folgende Liste:
und die liest du mit dem Code von Sirius3 ein (Kodierung musst du wissen, evtl. UTF-8?), dann kommt folgende Liste raus:
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.
Angenommen du hast folgende Liste:
Code: Alles auswählen
BIENE
HUND
KATZE
BIENE
HUND
KATZE
BIENE
HUND
KATZE
BIENE
HUND
KATZE
Code: Alles auswählen
['BIENE', 'HUND', 'KATZE', 'BIENE', 'HUND', 'KATZE', 'BIENE', 'HUND', 'KATZE', 'BIENE', 'HUND', 'KATZE']
Zur Einrückung:
Du musst im vollständigen Editor auf das </> Symbol klicken und den Code zwischen die Code-Tags packen.
- __blackjack__
- User
- Beiträge: 14052
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@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.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
@ 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
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

- __blackjack__
- User
- Beiträge: 14052
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@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.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
@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
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