python Durchlaufen der Eingabedatei

Meine Frage ist in Bezug auf Datei-input in Python, mit open(). Ich habe eine text-Datei mytext.txt mit 3 Linien.
Ich versuche, zwei Dinge zu tun mit dieser Datei: die Linien drucken, und drucken Sie die Anzahl der Zeilen.

Habe ich versucht den folgenden code:

input_file = open('mytext.txt', 'r')
count_lines = 0
for line in input_file:
    print line
for line in input_file:
    count_lines += 1
print 'number of lines:', count_lines

Ergebnis: es gibt die 3 Zeilen korrekt, aber druckt "Anzahl der Zeilen: 0" (anstatt 3)


Fand ich zwei Möglichkeiten, es zu lösen, und es zu drucken 3:

1) ich benutze eine Schleife anstelle von zwei

input_file = open('mytext.txt', 'r')
count_lines = 0
for line in input_file:
    print line
    count_lines += 1
print 'number of lines:', count_lines

2) nach der ersten Schleife definiere ich inputfile wieder

input_file = open('mytext.txt', 'r')
count_lines = 0
for line in input_file:
    print line
input_file = open('mytext.txt', 'r')
for line in input_file:
    count_lines += 1
print 'number of lines:', count_lines

Mir, wie es scheint, die definition input_file = ... ist gültig für nur eine Schleife, als ob es gelöscht wurde, nachdem ich es für eine Schleife. Aber ich verstehe nicht, warum, wahrscheinlich ist es nicht 100% klar ist mir noch, wie variable = open(filename) behandelt in Python.

Durch die Art und Weise, sehe ich, dass in diesem Fall ist es besser, verwenden Sie nur eine Schleife. Allerdings habe ich das Gefühl, ich habe, um diese Frage klar, denn es könnte Fälle geben, wenn ich kann/muss, verwenden Sie es.

Wenn Sie möchten, Prozess-Linien, warum nicht readlines()
readlines wird Ihr Computer thrash und möglicherweise Abstürzen, wenn Sie plötzlich es mit einer großen Datei. Es ist in der Regel besser zu Lesen eine Zeile zu einem Zeitpunkt.
Sie können auch die Verwendung mit readline () liest eine Zeile zu einem Zeitpunkt. Oder um zu vermeiden, überlastung/Unfall mit readlines, verwenden Sie das optionale Größe hint parameter: readlines(Größe Hinweis). Das liefert die Anzahl der gesamten Zeilen, die passen in einen Puffer "Größe Hinweis."

InformationsquelleAutor | 2012-07-30

Schreibe einen Kommentar