Python Zeilen Schneiden und nur bestimmte werte ausgeben?
Ich habe eine Textdatei, welche ich mit Python einlesen möchte. Die Werte Innerhalb der Datei sind durch Tab getrennt:
Datum Uhrzeit Name Handynummer E-Mail-Adresse
Die liste hat knapp 400 Zeilen. Ich benötige aus jeder Zeile aber nur Das Datum, die Uhrzeit und die E-Mailadresse. Mein Code sieht bis jetzt wiefolgt aus:
fin = open(wt_fname, 'r')
_data = fin.readlines()
fin.close()
foo = _data[0].rstrip().split('\t')
print(foo[0])
print(foo[1])
print(foo[-1])
So lese ich die Daten der ersten Zeile aus.
Wie kann ich die restlichen Zeilen auslesen ohne jede einzelne Zeile neu aufzurufen und die Daten abzufragen und somit den Algorithmus unendlich lang zu machen?
Danke für die Unterstützung
1 Antwort
![](https://images.gutefrage.net/media/default/user/0_nmmslarge.png?v=1438863662000)
Bei Textdateien bitte IMMER unbedingt auf die Kodierung achten, und möglichst IMMER das "codecs" Modul verwenden:
import codecs
with codecs.open('file.tsv', 'r', 'utf-8') as fh:
for line in fh:
parts = line.strip().split('\t', 6)
if len(parts) != 5:
continue
date, time, name, phone, mail = parts
print('%s %s: %s' % (date, time, mail))
Außerdem ist es effizienter im Bezug auf Speicher, wenn du lesend über die Zeilen iterierst, anstatt sie in einem Rutsch einzulesen.
Viel Spaß! :)
PS: Noch einige Bemerkungen ...- Der "with-Block" übernimmt am Ende automatisch das Schließen von Dateien. Du musst also nicht extra "close()" aufrufen
- Die for-Schleife iteriert über jede Zeile des Dateihandles.
- Bei Split wird ein Limit von 6 angegeben, obwohl wir 5 Teile erwarten. Das ist eine Vorsichtsmaßnahme gegen DoS-Angriffe, die in diesem Beispiel nicht vorkommen wird, aber es schadet nichts, sich das schon mal anzugewöhnen.
- Bei der Zuweisung einer Collection an mehrere Variablen bitte immer VORHER die Größe überprüfen, sonst bekommst du ein Stack-Trace um die Ohren geworfen :)