Forum: PC-Programmierung Python, Importdatei gezielt Zeile ausgeben


von Seb (Gast)


Lesenswert?

Hi,

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

So, habe ich das versucht. Dabei habe ich zwei Probleme.

Zum einem wird jetzt die ganze Zeile Buchstabenweise untereinaner 
geschrieben. Und für die zweite Zeile wird mir gesagt

IndexError: list index out of range

Wie kann ich eine Textdatei einlesen und gezielt sagen ich möchte nur 
Zeile 2 Ausgeben?

von Info (Gast)


Lesenswert?

Erstmal nachvollziehen, was dein Programm eigentlich macht!

von Info (Gast)


Lesenswert?


von la bissia che strissia (Gast)


Lesenswert?

> ich möchte mit Python eine textdatei einlesen und gezielt eine Zeile
> davon auslesen

Deine Absicht ist klar (bis auf einlesen/auslesen: ich würde ausGEBEN 
vorziehen)

 Aber dein Code gibt überhaupt nicht deine Absicht wieder: er tut was 
ganz anderes.
Ich denke Du hast den Code irgendwie hingeschrieben, ohne zu verstehen 
wofür dieser steht.

Ließ den Code genau, verstehe was er tut - erstmal losgelöst von deiner 
Absicht.
Verstehst Du ihn, weisst Du was Du löschen musst (viel) und was fehlt 
(wenig).

Z.B. was tun die 3 for-Schleifen? Wozu 3 davon?
(deine Absicht ist nicht etwas mehrmals zu tun...)

von Bernd K. (prof7bit)


Lesenswert?

Seb schrieb:
> Zum einem wird jetzt die ganze Zeile Buchstabenweise untereinaner
> geschrieben.

Klar, Du iterierst ja auch über die Buchstaben der Zeile.

von Sheeva P. (sheevaplug)


Lesenswert?

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.