Voraussetzungen:
Python bietet integrierte Funktionen zum Erstellen, Schreiben und Lesen von Dateien. Es gibt zwei Arten von Dateien, die in Python verarbeitet werden können: normale Textdateien und Binärdateien (geschrieben in binärer Sprache, 0 und 1). In diesem Artikel untersuchen wir das zeilenweise Lesen einer Datei.
Methode 1: Eine Datei Zeile für Zeile mit readlines() lesen
readlines() wird verwendet, um alle Zeilen auf einmal zu lesen und sie dann als jede Zeile als Zeichenfolgenelement in einer Liste zurückzugeben. Diese Funktion kann für kleine Dateien verwendet werden, da sie den gesamten Dateiinhalt in den Speicher liest und ihn dann in separate Zeilen aufteilt. Wir können die Liste durchlaufen und das Newline-Zeichen „ “ mit der Funktion „strip()“ entfernen.
Beispiel:
Python3
Wie viele Wochen hat ein Monat?
# Python code to> # demonstrate readlines()> L>=> [>'Geeks
'>,>'for
'>,>'Geeks
'>]> # writing to file> file1>=> open>(>'myfile.txt'>,>'w'>)> file1.writelines(L)> file1.close()> # Using readlines()> file1>=> open>(>'myfile.txt'>,>'r'>)> Lines>=> file1.readlines()> count>=> 0> # Strips the newline character> for> line>in> Lines:> >count>+>=> 1> >print>(>'Line{}: {}'>.>format>(count, line.strip()))> |
>
>
Ausgabe:
Line1: Geeks Line2: for Line3: Geeks>
Die zeitliche Komplexität des angegebenen Python-Codes beträgt O(n), wobei n die Gesamtzahl der Zeilen in der Datei ist
Die Hilfsraumkomplexität des Codes beträgt O(n), wobei n die Gesamtzahl der Zeilen in der Datei ist.
Methode 2: Eine Datei Zeile für Zeile mit readline() lesen
Die Funktion readline() liest eine Zeile der Datei und gibt sie in Form einer Zeichenfolge zurück. Es benötigt einen Parameter n, der die maximale Anzahl an Bytes angibt, die gelesen werden. Liest jedoch nicht mehr als eine Zeile, auch wenn n die Länge der Zeile überschreitet. Dies ist beim Lesen einer großen Datei effizient, da nicht alle Daten auf einmal, sondern Zeile für Zeile abgerufen werden. readline() gibt die nächste Zeile der Datei zurück, die am Ende ein Zeilenumbruchzeichen enthält. Wenn das Ende der Datei erreicht ist, wird außerdem eine leere Zeichenfolge zurückgegeben.
Beispiel:
SCHRITT FÜR SCHRITT ANSATZ:
- Erstellen Sie eine Liste L mit drei Zeichenfolgeelementen, die Zeilenumbrüche enthalten.
- Öffnen Sie eine Datei mit dem Namen myfile.txt im Schreibmodus und weisen Sie sie der Variablen file1 zu.
- Schreiben Sie den Inhalt der Liste L mit der Methode writelines() des Dateiobjekts file1 in die Datei.
- Schließen Sie das Dateiobjekt file1 mit der Methode close().
- Öffnen Sie die Datei namens myfile.txt im Lesemodus und weisen Sie sie der Variablen file1 zu.
- Initialisieren Sie eine Variablenanzahl auf 0.
- Starten Sie eine Endlosschleife.
- Erhöhen Sie die Variablenanzahl in jeder Iteration der Schleife um 1.
- Lesen Sie mit der Methode readline() die nächste Zeile aus dem Dateiobjekt file1 und weisen Sie sie der Variablen line zu.
- Überprüfen Sie, ob die Zeilenvariable leer ist. Wenn es leer ist, bedeutet dies, dass das Ende der Datei erreicht wurde. Brechen Sie in diesem Fall mit der break-Anweisung aus der Schleife aus.
- Geben Sie den Wert von count und den Inhalt von line mit der Methode format() der String-Klasse aus. Die Methode strip() wird verwendet, um das Newline-Zeichen am Ende der Zeile zu entfernen.
- Schließen Sie das Dateiobjekt file1 mit der Methode close().
Python3
# Python program to> # demonstrate readline()> L>=> [>'Geeks
'>,>'for
'>,>'Geeks
'>]> # Writing to a file> file1>=> open>(>'myfile.txt'>,>'w'>)> file1.writelines((L))> file1.close()> # Using readline()> file1>=> open>(>'myfile.txt'>,>'r'>)> count>=> 0> while> True>:> >count>+>=> 1> ># Get next line from file> >line>=> file1.readline()> ># if line is empty> ># end of file is reached> >if> not> line:> >break> >print>(>'Line{}: {}'>.>format>(count, line.strip()))> file1.close()> |
>
Snipping-Tool in Ubuntu
>
Ausgabe:
Line1 Geeks Line2 for Line3 Geeks>
Methode 3: Lesen Sie eine Datei Zeile für Zeile mit der for-Schleife
Beim Öffnen einer Datei wird von der Funktion open() ein iterierbares Objekt zurückgegeben. Diese letzte Möglichkeit, eine Datei Zeile für Zeile zu lesen, umfasst das Durchlaufen eines Dateiobjekts in einer for-Schleife. Dabei nutzen wir eine integrierte Python-Funktion, die es uns ermöglicht, das Dateiobjekt implizit zu iterieren, indem wir eine for-Schleife in Kombination mit der Verwendung des iterierbaren Objekts verwenden. Dieser Ansatz erfordert weniger Codezeilen, was immer die beste Vorgehensweise ist, die es wert ist, befolgt zu werden.
Beispiel:
ymail
Python3
# Python program to> # demonstrate reading files> # using for loop> L>=> [>'Geeks
'>,>'for
'>,>'Geeks
'>]> # Writing to file> file1>=> open>(>'myfile.txt'>,>'w'>)> file1.writelines(L)> file1.close()> # Opening file> file1>=> open>(>'myfile.txt'>,>'r'>)> count>=> 0> # Using for loop> print>(>'Using for loop'>)> for> line>in> file1:> >count>+>=> 1> >print>(>'Line{}: {}'>.>format>(count, line.strip()))> # Closing files> file1.close()> |
>
>
Ausgabe:
Using for loop Line1: Geeks Line2: for Line3: Geeks>
Methode 4: Lesen Sie eine Datei Zeile für Zeile mithilfe der for-Schleife und des Listenverständnisses
Ein Listenverständnis besteht aus Klammern, die den Ausdruck enthalten, der für jedes Element zusammen mit der for-Schleife ausgeführt wird, um jedes Element zu durchlaufen. Hier lesen wir die Textdatei und drucken die Rohdaten einschließlich des neuen Zeilenzeichens in einer anderen Ausgabe aus. Wir haben alle neuen Zeilenzeichen aus der Liste entfernt.
Beispiel
Python3
Laden Sie den YouTube VLC Media Player herunter
with>open>(>'myfile.txt'>) as f:> >lines>=> [line>for> line>in> f]> print>(lines)> # removing the new line characters> with>open>(>'myfile.txt'>) as f:> >lines>=> [line.rstrip()>for> line>in> f]> print>(lines)> |
>
>
Ausgabe:
['Geeks ', 'For ', 'Geeks'] ['Geeks', 'For', 'Geeks']>
Mit Aussage
Bei den oben genannten Ansätzen muss die Datei jedes Mal, wenn sie geöffnet wird, explizit geschlossen werden. Wenn man vergisst, die Datei zu schließen, kann dies zu mehreren Fehlern im Code führen, d. h. viele Änderungen in Dateien werden erst wirksam, wenn die Datei ordnungsgemäß geschlossen wird. Um dies zu verhindern, kann die with-Anweisung verwendet werden. Die With-Anweisung in Python wird bei der Ausnahmebehandlung verwendet, um den Code sauberer und besser lesbar zu machen. Es vereinfacht die Verwaltung gemeinsamer Ressourcen wie Dateiströme. Sehen Sie sich das folgende Codebeispiel an, wie die Verwendung der with-Anweisung den Code sauberer macht. Bei Verwendung mit der Anweisung ist es nicht erforderlich, file.close() aufzurufen. Die Anweisung selbst gewährleistet die ordnungsgemäße Beschaffung und Freigabe von Ressourcen.
Beispiel:
Python3
# Python program to> # demonstrate with> # statement> L>=> [>'Geeks
'>,>'for
'>,>'Geeks
'>]> # Writing to file> with>open>(>'myfile.txt'>,>'w'>) as fp:> >fp.writelines(L)> # using readlines()> count>=> 0> print>(>'Using readlines()'>)> with>open>(>'myfile.txt'>) as fp:> >Lines>=> fp.readlines()> >for> line>in> Lines:> >count>+>=> 1> >print>(>'Line{}: {}'>.>format>(count, line.strip()))> # Using readline()> count>=> 0> print>(>'
Using readline()'>)> with>open>(>'myfile.txt'>) as fp:> >while> True>:> >count>+>=> 1> >line>=> fp.readline()> >if> not> line:> >break> >print>(>'Line{}: {}'>.>format>(count, line.strip()))> # Using for loop> count>=> 0> print>(>'
Using for loop'>)> with>open>(>'myfile.txt'>) as fp:> >for> line>in> fp:> >count>+>=> 1> >print>(>'Line{}: {}'>.>format>(count, line.strip()))> |
>
>
Ausgabe:
String als int umwandeln
Using readlines() Line1: Geeks Line2: for Line3: Geeks Using readline() Line1: Geeks Line2: for Line3: Geeks Using for loop Line1: Geeks Line2: for Line3: Geeks>