Wie kann man bei Python .txt einlesen und bestimmte Zeilen ausgeben?

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.


ManuHOfficial 
Beitragsersteller
 14.09.2015, 12:33

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

1

Zeile auslesen

Du splittest den String mit file_contents.split("/n") zu einer Liste von Zeilen


JCK2000  14.09.2015, 10:44

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])

0
TeeTier  14.09.2015, 12:22
@JCK2000

Die Klammern sind falsch und außerdem ist die built-in Version von "len" wesentlich sauberer:

for i in range(len(zeilen)):
print(zeilen[i])

Aber davon ist das komplette Einlesen einer Datei mit anschließendem Splitting sowieso keine ordentliche Lösung.

0
ManuHOfficial 
Beitragsersteller
 14.09.2015, 10:29

Super danke,

aber trotzdem bleibt mir die Frage, wie werden nur Zeilen die "Test123ABC" enthalten ausgegeben?

Lg.
Manu

0

Die erste Zeile bekommst dann so :

Zeilen=print(Zeilen[0])


ManuHOfficial 
Beitragsersteller
 14.09.2015, 10:39

Danke,

aber die erste Zeile alleine nutzt mir nichts.
Ich brauche alle Zeilen die ein "Test123ABC" enthalten.

Lg.
Manu

0
JCK2000  14.09.2015, 10:46
@ManuHOfficial

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])

1
ManuHOfficial 
Beitragsersteller
 14.09.2015, 11:33
@JCK2000

Kannst du mir das bitte auf mein Beispiel mit "Test123ABC" erklären?

0
JCK2000  14.09.2015, 11:44
@ManuHOfficial

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

1
ManuHOfficial 
Beitragsersteller
 14.09.2015, 12:03
@JCK2000

Da bekomm ich beim for einen Invalid Syntax Fehler. :(

0