Seb schrieb:
> ich möchte mit Python eine textdatei einlesen und gezielt eine Zeile
> davon auslesen
>
>
1 | > fobj = open("test.txt")
|
2 | > for line1 in fobj.readlines()[0]:
|
3 | > print(line1)
|
4 | > for line2 in fobj.readlines()[1]:
|
5 | > print(line2)
|
6 | > for line3 in fobj.readlines()[2]:
|
7 | > print(line3)
|
8 | > fobj.close()
|
9 | >
|
>
> So, habe ich das versucht. Dabei habe ich zwei Probleme.
>
> Zum einem wird jetzt die ganze Zeile Buchstabenweise untereinaner
> geschrieben.
Kein Wunder: fobj.readlines() gibt ein Array von Strings mit allen
Zeilen in der Datei zurück. Aus diesem Array von String extrahierst Du
dann mit [0] genau einen String, über den Du dann mit einer for-Schleife
iterierst. Da Strings in Python iterierbar sind und der Iterator den
String dann zeichenweise zurückgibt, schreibt Deine erste for-Schleife
jeweils ein Zeichen des Strings[0] aus dem Array von readlines() in die
Variable line1 und gibt diese aus.
> Und für die zweite Zeile wird mir gesagt
>
> IndexError: list index out of range
Natürlich. Da Du die Datei fobj bereits in der ersten for-Schleife mit
readlines() komplett gelesen hast, steht der Lesezeiger der Datei an
deren Ende, so daß der zweite Aufruf von readlines() lediglich ein
leeres Array zurückgibt -- und leere Arrays haben natürlich keine
Position [1].
> Wie kann ich eine Textdatei einlesen und gezielt sagen ich möchte nur
> Zeile 2 Ausgeben?
Wenn die Datei klein genug ist, um in den Speicher zu passen:
1 | fobj = file('test.txt', 'r')
|
2 | lines = fobj.readlines()
|
3 | fobj.close()
|
4 | print lines[0]
|
5 | print lines[1]
|
6 | print lines[2]
|
Wenn die Datei nicht in den Speicher paßt, solltest Du sie zeilenweise
lesen und eine Zeilennummer mitführen:
1 | with open('test.txt', 'r') as ifh:
|
2 | lineno = 0
|
3 | while True:
|
4 | lineno += 1
|
5 | line = f.readline()
|
6 | if line == '':
|
7 | break
|
8 | if lineno in (0, 1, 2):
|
9 | print line
|
Hierbei ist zu beachten, daß die Zeilennummern mit 0 beginnen. Zum
with-Statement siehe hier:
https://docs.python.org/3/reference/compound_stmts.html#the-with-statement