Textdatei einlesen und bearbeiten

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Sirius3
User
Beiträge: 18273
Registriert: Sonntag 21. Oktober 2012, 17:20

Warum packst Du immer alles in Zitate?

Les doch einfach mal Deinen Code:

Code: Alles auswählen

with open("test.txt", "r", encoding='UTF-8') as f:
    list = []
    listen = []
    for line in f:
        list = [f.readlines()]
        for wörter in list:
            listen = line.replace("i","1")
            print(listen)
Erst wird eine Datei geöffnet, dann das builtin list mit einer leeren Liste überschrieben (keine gute Idee, wird auch gar nicht gebraucht).
Dann wird listen an eine Leere liste gebunden, was auch nicht gebraucht wird.
Dann liest Du in einer for-Schleife die erste Zeile der Datei in `line`.
Dann liest Du den Rest der Datei, packst die Liste der Zeilen wiederum in eine Liste mit dann einem Element.
Dann iterierst Du über diese Liste, so dass das eine Element an wörter gebunden wird.
wörter enthält jetzt also alle Zeilen, außer der ersten Zeile. Das wird aber gar nicht benutzt. Da die for-Schleife exakt einmal durchlaufen wird und die Laufvariable nicht benutzt wird, kann man die for-Schleife auch gleich weglassen.
Jetzt nimmst Du `line`, was ja die erste Zeile enthält, und ersetzt darin alle i durch 1 und bindest diesen String an listen, was wiederum ein total irreführender Name ist. Das gibst Du dann aus.

Wenn Du also Deinen Code lesen würdest, würdest Du merken, dass da viele komische Dinge passieren, die Du sicher nicht so willst. Wenn man den ganzen Quatsch weg läßt bleibt:

Code: Alles auswählen

with open("test.txt", "r", encoding='UTF-8') as lines:
    first_line = next(lines)
    transformed_line = first_line.replace("i", "1")
    print(transformed_line )
Beim Programmieren kommt man mit Raten nicht weit. Bau Dein Programm Schritt für Schritt mit einzelnen Komponenten auf, die Du verstanden und getestet hast.
mois
User
Beiträge: 19
Registriert: Mittwoch 28. Oktober 2020, 12:54

Das Problem ist ja das nicht alle Zeilen durchlaufen werden sondern nur die erste Zeile wird durchlaufen und da wird es ersetzt
mois
User
Beiträge: 19
Registriert: Mittwoch 28. Oktober 2020, 12:54

Sirus danke für deine Hilfe, aber bei deinem Code wird auch nur die erste zeile durchgegangen und ersetzt und nicht jede Zeile
Sirius3
User
Beiträge: 18273
Registriert: Sonntag 21. Oktober 2012, 17:20

@mois: natürlich, weil ich Deinen Code auch nur aufgeräumt habe. So sieht man dann den Unterschied, was der Computer tatsächlich macht.
Man könnte natürlich auch alle Zeilen auskommentieren, die Quatsch sind:

Code: Alles auswählen

with open("test.txt", "r", encoding='UTF-8') as f:
#    list = []
#    listen = []
    for line in f:
#        list = [f.readlines()]
#        for wörter in list:
            listen = line.replace("i","1")
            print(listen)
Dem ganzen dann noch gute Variablennamen geben:

Code: Alles auswählen

with open("test.txt", "r", encoding='UTF-8') as lines:
    for line in lines:
        translated_line = line.replace("i","1")
        print(translated_line)
und man ist fertig.
mois
User
Beiträge: 19
Registriert: Mittwoch 28. Oktober 2020, 12:54

Und was wenn ich mehrer Buchstaben durch zahlen ersetzen will? Muss man dann für jeden Buchstaben eine for Zeile einbauen? Oder kann man In eine for Schleife jedes Mal translated_line= line.replace(„...“,“...“) einbauen?
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Du kannst mehrere replace hinterinander aufrufen. Die bessere Wahl wäre über ein Dictionary.

Viele Sachen die du hier fragst kannst du auch eigentlich selbst herausfinden. Ausprobieren und Variablen ausgeben lassen.
mois
User
Beiträge: 19
Registriert: Mittwoch 28. Oktober 2020, 12:54

Da ich normalerweise mit Java programmiere fällt mir das schwer sowas mit Python zu machen da ich die ganzen Funktionen nicht kenne deshalb frage ich
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Darum hab ich dir empfohlen das Grundlagentutorial durchzuarbeiten.

Englisch 3.9
Deutsch 3.3
Benutzeravatar
__blackjack__
User
Beiträge: 14053
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Falls es nur einzelne Zeichen sind die ersetzt werden sollen, würde ich die `translate()`-Methode auf Zeichenketten verwenden.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten