Wie kann man bei Python .txt einlesen und bestimmte Zeilen ausgeben?
Hallo,
ich versuche mich an einen Python Script. Ich lese in das Script eine .txt wie folgt ein:
my_file=open("DATEI.txt")
file_contents=my_file.read()
print(file_contents)
my_file.close()
print(file_contents) zeigt mir dan natürlich auch die komplette .txt an.
Nun will ich aber nur Zeilen ausgeben, die einen besimmten Inhalt haben, zB. "Test123ABC" => Sollen nur die Zeilen ausgegeben werden, die auch "Test123ABC" enthalten.
Wie ist das den möglich - Ich bin noch recht neu in sachen Python?
LG. Manu
3 Antworten
In Python 2.7+ oder 3.x macht man das - mit Rücksicht auf die Textkodierung und Speicherverbrauch - ordentlich so:
#!/usr/bin/python3
FILE = 'file.txt'
NEEDLE = 'Test123ABC'
import codecs
if __name__ == '__main__':
with codecs.open(FILE, 'r', 'utf-8', 'strict') as fh:
for line in fh:
if NEEDLE in line:
print(line.strip())
Da ein Datei-Objekt das Iterator-Interface implementiert, kannst du die Datei sehr komfortabel Zeile für Zeile einfach mit "for ... in" durchsuchen.
Die anderen beiden Antworten sind leider sehr ineffizient (im Bezug auf Speicher und Laufzeit) und nicht wirklich sauberes Python.
Viel Spaß! :)
PS: Die Kodierung deiner Textdatei musst du natürlich ggf. anpassen.
Vielen vielen Dank!!!
Genau das war es! :-)
Super, danke für die schneller Hilfe.
Es kann gut sein, das in nächster Zeit noch die ein oder anderen Fragen von mir auftauchen :P
Zeile auslesen
Du splittest den String mit file_contents.split("/n") zu einer Liste von Zeilen
Super danke,
aber trotzdem bleibt mir die Frage, wie werden nur Zeilen die "Test123ABC" enthalten ausgegeben?
Lg.
Manu
Die erste Zeile bekommst dann so :
Zeilen=print(Zeilen[0])
Danke,
aber die erste Zeile alleine nutzt mir nichts.
Ich brauche alle Zeilen die ein "Test123ABC" enthalten.
Lg.
Manu
Du kannst dir jede beliebige Zeile auslesen lassen die Zahl in den Eckigen klammern ist die zeilennummer-1 für alle zeilen also
for(i in range(0,Zeilen.__len__())
print(Zeilen[i])
Kannst du mir das bitte auf mein Beispiel mit "Test123ABC" erklären?
Du schribst einfach deinen Code und fügst anstatt des print Befehls
Zeilen = file_contens.Splitt("/n") #erstellt eine Liste aller Zeilen
for(Zeile in Zeilen) #ührt den eingerückten code für jedes Element der Liste aus
print(Zeile)
Ein
Da bekomm ich beim for einen Invalid Syntax Fehler. :(
Sry du musst die runde Klammer bei for weglassen Java Angewohnheit
Du kannst dir jede beliebige Zeile auslesen lassen die Zahl in den Eckigen klammern ist die zeilennummer-1 für alle zeilen also
for(i in range(0,Zeilen.__len__())
print(Zeilen[i])