Sie haben den Anruf zu readlines
in eine Schleife, aber das ist nicht die beabsichtigte Verwendung, weil readlines
die gesamte Datei auf einmal aufnimmt, Rückkehr Sie eine LIST von Newline Strings beendet.
Möglicherweise möchten Sie eine solche Liste speichern und arbeiten auf es
list_of_lines = open(filename).readlines() # no need for closing, python will do it for you
odd = 1
for line in list_of_lines:
if odd : print(line, end='')
odd = 1-odd
Zwei Bemerkungen:
odd
zwischen 1
abwechselnd (daher der Fall, wenn Argument eines if
) oder 0
(daher false wenn Argument einer if
),
- das optionale Argument
end=''
an die print
Funktion n ist erforderlich, da jede Zeile in list_of_lines
mit einem neuen Zeilenzeichen abgeschlossen wird. Wenn Sie das optionale Argument weglassen, gibt die Funktion print
ein ZWEITES Zeilenzeichen am Ende jeder Zeile aus.
, um Ihren Code Kommen wir zurück, können Sie sein Verhalten beheben eine
f.seek(0)
vor der Schleife mit der Datei zu seiner Anfangsposition zurückzuspulen und mit der f.readline()
(aussehen, es NICHT readline**S**
ist) Methode innerhalb der Schleife, aber seien Sie versichert, dass der Prozess wie folgt ist. sagen wir mal, ein bisschen unkonventionell ...
Schließlich ist es möglich, mit einem Einzeiler alles, was Sie tun wollen
print(''.join(open(filename).readlines()[::2]))
, die die slice notation for list s verwendet und die string method .join()
Was das bedeutet ' [n] sollte bedeuten? –
Nach dem ersten 'for line in f' hast du schon die ganze Datei gelesen und das Ende erreicht. Da Sie sich am Ende der Datei befinden, gibt 'f.readlines()' eine leere Liste zurück. Sie sollten nur einmal die Zeilen lesen. – khelwood
In den Tutorials, die ich gelesen habe, sagten sie: "Wenn Sie eine bestimmte Zeile benötigen, können Sie einen Listeneintrag verwenden, zB f.readlines() [2] gibt die dritte Zeile des Dateiobjekts f" zurück, also habe ich diese Konstruktion benutzt. –