GeeksforGeeks
Voorvereisten:
- Toegangsmodi
- Open een bestand
- Sluit een bestand
Python biedt ingebouwde functies voor het maken, schrijven en lezen van bestanden. Er zijn twee soorten bestanden die in python kunnen worden afgehandeld, normale tekstbestanden en binaire bestanden (geschreven in binaire taal, 0’s en 1’s). In dit artikel gaan we het lezen van regel voor regel uit een bestand bestuderen.
Regel voor regel lezen
Het gebruik van readlines()
readlines() wordt gebruikt om alle regels in een keer te lezen en ze dan terug te geven als elke regel een string element in een lijst. Deze functie kan worden gebruikt voor kleine bestanden, omdat het de hele inhoud van het bestand in het geheugen leest, en het dan splitst in afzonderlijke regels. We kunnen de lijst itereren en het teken voor de nieuwe regel verwijderen met de functie strip().
Voorbeeld:
L
=
file1
=
open
(
,
'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()))
Uitvoer:
Line1: GeeksLine2: forLine3: Geeks
Gebruik van readline()
readline() functie leest een regel van het bestand en geeft deze terug in de vorm van een string. Het neemt een parameter n, die het maximum aantal bytes dat zal worden gelezen specificeert. Er wordt echter niet meer dan één regel gelezen, zelfs als n de lengte van de regel overschrijdt. Het zal efficiënt zijn bij het lezen van een groot bestand, omdat in plaats van alle gegevens in een keer op te halen, het regel voor regel ophaalt. readline() geeft de volgende regel van het bestand terug die een newline karakter bevat op het einde. En als het einde van het bestand is bereikt, geeft het een lege string terug.
Voorbeeld:
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()
Uitvoer:
Line1 GeeksLine2 forLine3 Geeks
Gebruik van for-lus
Een iterable object wordt teruggegeven door open() functie bij het openen van een bestand. Deze laatste manier om een bestand regel-voor-regel in te lezen omvat het itereren over een bestandsobject in een for-lus. Door dit te doen maken we gebruik van een ingebouwde Python functie die ons toestaat om impliciet te itereren over het bestandsobject door gebruik te maken van een for-lus in combinatie met het gebruik van het iterable object. Deze aanpak neemt minder regels code in beslag, wat altijd de beste praktijk is om te volgen.
Voorbeeld:
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()
Uitvoer:
Using for loopLine1: GeeksLine2: forLine3: Geeks
Met statement
In de bovenstaande benaderingen moet het bestand, telkens als het wordt geopend, expliciet worden gesloten. Als men vergeet het bestand te sluiten, kan dat tot bugs in de code leiden. Veel wijzigingen in bestanden worden pas van kracht als het bestand goed gesloten is. Om dit te voorkomen kan het With statement gebruikt worden. Het With statement in Python wordt gebruikt in exception handling om de code schoner en veel leesbaarder te maken. Het vereenvoudigt het beheer van gemeenschappelijke bronnen zoals bestandsstromen. Zie het volgende code voorbeeld hoe het gebruik van het with statement de code schoner maakt. Het is niet nodig om file.close() aan te roepen wanneer je het with the statement gebruikt. Het with the statement zelf zorgt voor een correcte verwerving en vrijgave van bronnen.
Voorbeeld:
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()))
Output:
Using readlines()Line1: GeeksLine2: forLine3: GeeksUsing readline()Line1: GeeksLine2: forLine3: GeeksUsing for loopLine1: GeeksLine2: forLine3: Geeks