logo

Lees een bestand regel voor regel in Python

Vereisten:

Python biedt ingebouwde functies voor het maken, schrijven en lezen van bestanden. Er zijn twee soorten bestanden die in Python kunnen worden verwerkt: normale tekstbestanden en binaire bestanden (geschreven in binaire taal, 0s en 1s). In dit artikel gaan we het lezen van regel voor regel uit een bestand bestuderen.



Methode 1: Lees een bestand regel voor regel met behulp van readlines()

readlines() wordt gebruikt om alle regels in één keer te lezen en ze vervolgens als elke regel als een stringelement in een lijst terug te geven. Deze functie kan worden gebruikt voor kleine bestanden, omdat de volledige bestandsinhoud naar het geheugen wordt gelezen en deze vervolgens in afzonderlijke regels wordt opgesplitst. We kunnen de lijst doorlopen en het teken newline ‘ ’ verwijderen met behulp van de functie strip().

Voorbeeld:

Python3








# 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()))>

>

>

Uitgang:

Line1: Geeks Line2: for Line3: Geeks>

De tijdscomplexiteit van de gegeven Python-code is O(n), waarbij n het totale aantal regels in het bestand is

De hulpruimtecomplexiteit van de code is O(n), waarbij n het totale aantal regels in het bestand is.

Methode 2: Een bestand regel voor regel lezen met readline()

De functie readline() leest een regel van het bestand en retourneert deze in de vorm van een string. Er is een parameter n voor nodig, die het maximale aantal bytes specificeert dat wordt gelezen. Leest echter niet meer dan één regel, zelfs als n de lengte van de regel overschrijdt. Het zal efficiënt zijn bij het lezen van een groot bestand, omdat het in plaats van alle gegevens in één keer op te halen, regel voor regel wordt opgehaald. readline() retourneert de volgende regel van het bestand die aan het einde een newline-teken bevat. Als het einde van het bestand wordt bereikt, zal het bovendien een lege string retourneren.

Voorbeeld:

STAP VOOR STAP AANPAK:

  1. Maak een lijst L met drie tekenreekselementen die nieuweregeltekens bevatten.
  2. Open een bestand met de naam mijnbestand.txt in de schrijfmodus en wijs het toe aan het variabele bestand1.
  3. Schrijf de inhoud van de lijst L naar het bestand met behulp van de writelines()-methode van het bestandsobject file1.
  4. Sluit het bestandsobject file1 met behulp van de close() -methode.
  5. Open het bestand met de naam mijnbestand.txt in de leesmodus en wijs het toe aan het variabele bestand1.
  6. Initialiseer het aantal variabelen op 0.
  7. Start een oneindige lus.
  8. Verhoog het aantal variabelen met 1 in elke iteratie van de lus.
  9. Lees de volgende regel uit het bestandsobject file1 met behulp van de readline()-methode en wijs deze toe aan de variabeleregel.
  10. Controleer of de regelvariabele leeg is. Als het leeg is, betekent dit dat het einde van het bestand is bereikt. In dat geval breek je de lus af met behulp van de break-instructie.
  11. Druk de waarde van count en de inhoud van de regel af met behulp van de format() -methode van de stringklasse. De strip() methode wordt gebruikt om het newline-teken aan het einde van de regel te verwijderen.
  12. Sluit het bestandsobject file1 met behulp van de close() -methode.

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()>

>

>

Java versus c++

Uitgang:

Line1 Geeks Line2 for Line3 Geeks>

Methode 3: Lees een bestand regel voor regel met behulp van de for-lus

Een itereerbaar object wordt geretourneerd door de functie open() tijdens het openen van een bestand. Deze laatste manier om een ​​bestand regel voor regel te lezen omvat het herhalen van een bestandsobject in een lus. Door dit te doen maken we gebruik van een ingebouwde Python-functie waarmee we impliciet over het bestandsobject kunnen itereren met behulp van een for-lus in combinatie met het gebruik van het itereerbare object. Voor deze aanpak zijn minder regels code nodig, wat altijd de beste praktijk is die het waard is om te volgen.

Voorbeeld:

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()>

>

>

Uitgang:

Using for loop Line1: Geeks Line2: for Line3: Geeks>

Methode 4: Lees een bestand regel voor regel met behulp van lus- en lijstbegrip

Een lijstbegrip bestaat uit haakjes die de uitdrukking bevatten, die voor elk element wordt uitgevoerd, samen met de for-lus om over elk element te itereren. Hier zullen we het tekstbestand lezen en de onbewerkte gegevens afdrukken, inclusief het nieuwe regelteken. In een andere uitvoer hebben we alle nieuwe regeltekens uit de lijst verwijderd.

Voorbeeld

Python3




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)>

>

>

Uitgang:

['Geeks
', 'For
', 'Geeks'] ['Geeks', 'For', 'Geeks']>

Met verklaring

In de bovenstaande benaderingen moet het bestand elke keer dat het wordt geopend expliciet worden gesloten. Als iemand vergeet het bestand te sluiten, kan dit verschillende bugs in de code introduceren, dat wil zeggen dat veel wijzigingen in bestanden pas van kracht worden als het bestand correct is gesloten. Om dit te voorkomen kan met statement worden gebruikt. De With-instructie in Python wordt gebruikt bij de afhandeling van uitzonderingen om de code schoner en veel leesbaarder te maken. Het vereenvoudigt het beheer van algemene bronnen zoals bestandsstromen. Bekijk het volgende codevoorbeeld om te zien hoe het gebruik van de instructie with de code schoner maakt. Het is niet nodig om file.close() aan te roepen bij gebruik met de instructie. De met de verklaring zelf zorgt voor een juiste verwerving en vrijgave van middelen.

Voorbeeld:

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()))>

Java-verklaring
>

>

Uitgang:

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>