GeeksforGeeks
Voraussetzungen:
- Zugriffsmodi
- Öffnen einer Datei
- Schließen einer Datei
Python bietet eingebaute Funktionen zum Erstellen, Schreiben und Lesen von Dateien. Es gibt zwei Arten von Dateien, die in Python gehandhabt werden können, normale Textdateien und Binärdateien (geschrieben in Binärsprache, 0s und 1s). In diesem Artikel werden wir uns mit dem zeilenweisen Lesen aus einer Datei beschäftigen.
Zeilenweise lesen
Verwenden von readlines()
readlines() wird verwendet, um alle Zeilen auf einmal zu lesen und sie dann als jede Zeile ein String-Element in einer Liste zurückzugeben. Diese Funktion kann für kleine Dateien verwendet werden, da sie den gesamten Dateiinhalt in den Speicher einliest und ihn dann in einzelne Zeilen aufteilt. Wir können über die Liste iterieren und das Zeilenumbruchzeichen ‚\n‘ mit der Funktion strip() entfernen.
Beispiel:
L
=
file1
=
open
(
'myfile.txt'
,
'w'
)
file1.writelines(L)
file1.close()
file1
=
open
(
'myfile.txt'
,
'r'
)
Lines
=
file1.readlines()
count
=
0
for
line
in
Lines:
count
+
=
1
print
(
"Line{}: {}"
.
format
(count, line.strip()))
Ausgabe:
Line1: GeeksLine2: forLine3: Geeks
Verwendung von readline()
Die Funktion readline() liest eine Zeile der Datei und gibt sie in Form einer Zeichenkette zurück. Sie nimmt einen Parameter n, der die maximale Anzahl von Bytes angibt, die gelesen werden sollen. Sie liest jedoch nicht mehr als eine Zeile, auch wenn n die Länge der Zeile überschreitet. Es ist effizient, wenn eine große Datei gelesen wird, da es nicht alle Daten in einem Rutsch holt, sondern Zeile für Zeile. readline() gibt die nächste Zeile der Datei zurück, die am Ende ein Zeilenumbruchzeichen enthält. Außerdem gibt sie eine leere Zeichenkette zurück, wenn das Ende der Datei erreicht ist.
Beispiel:
L
=
file1
=
open
(
'myfile.txt'
,
'w'
)
file1.writelines((L))
file1.close()
file1
=
open
(
'myfile.txt'
,
'r'
)
count
=
0
while
True
:
count
+
=
1
line
=
file1.readline()
if
not
line:
break
print
(
"Line{}: {}"
.
format
(count, line.strip()))
file1.close()
Ausgang:
Line1 GeeksLine2 forLine3 Geeks
Verwendung der for-Schleife
Ein iterables Objekt wird von der Funktion open() beim Öffnen einer Datei zurückgegeben. Die letzte Möglichkeit, eine Datei zeilenweise einzulesen, besteht darin, in einer for-Schleife über ein Dateiobjekt zu iterieren. Dabei machen wir uns eine eingebaute Python-Funktion zunutze, die es uns erlaubt, in Kombination mit der Verwendung des iterable-Objekts in einer for-Schleife implizit über das Dateiobjekt zu iterieren. Dieser Ansatz benötigt weniger Codezeilen, was immer die beste Praxis ist, die es wert ist, befolgt zu werden.
Beispiel:
L
=
file1
=
open
(
'myfile.txt'
,
'w'
)
file1.writelines(L)
file1.close()
file1
=
open
(
'myfile.txt'
,
'r'
)
count
=
0
print
(
"Using for loop"
)
for
line
in
file1:
count
+
=
1
print
(
"Line{}: {}"
.
format
(count, line.strip()))
file1.close()
Ausgabe:
Using for loopLine1: GeeksLine2: forLine3: Geeks
Mit-Anweisung
In den obigen Ansätzen muss die Datei jedes Mal, wenn sie geöffnet wird, explizit geschlossen werden. Wenn man vergisst, die Datei zu schließen, kann das zu verschiedenen Fehlern im Code führen, d. h. viele Änderungen in Dateien werden erst dann wirksam, wenn die Datei ordnungsgemäß geschlossen wird. Um dies zu verhindern, kann die With-Anweisung verwendet werden. Die With-Anweisung in Python wird in der Ausnahmebehandlung verwendet, um den Code sauberer und besser lesbar zu machen. Sie vereinfacht die Verwaltung von allgemeinen Ressourcen wie Dateiströmen. Beachten Sie im folgenden Codebeispiel, wie die Verwendung der With-Anweisung den Code sauberer macht. Es besteht keine Notwendigkeit, file.close() aufzurufen, wenn Sie die with-Anweisung verwenden. Die with-Anweisung selbst sorgt für die ordnungsgemäße Erfassung und Freigabe von Ressourcen.
Beispiel:
L
=
with
open
(
"myfile.txt"
,
"w"
) as fp:
fp.writelines(L)
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()))
count
=
0
print
(
"\nUsing readline()"
)
with
open
(
"myfile.txt"
) as fp:
while
True
:
count
+
=
1
line
=
fp.readline()
if
not
line:
break
print
(
"Line{}: {}"
.
format
(count, line.strip()))
count
=
0
print
(
"\nUsing for loop"
)
with
open
(
"myfile.txt"
) as fp:
for
line
in
fp:
count
+
=
1
print
(
"Line{}: {}"
.
format
(count, line.strip()))
Ausgabe:
Using readlines()Line1: GeeksLine2: forLine3: GeeksUsing readline()Line1: GeeksLine2: forLine3: GeeksUsing for loopLine1: GeeksLine2: forLine3: Geeks