Förutsättningar:
Python tillhandahåller inbyggda funktioner för att skapa, skriva och läsa filer. Det finns två typer av filer som kan hanteras i python, vanliga textfiler och binära filer (skrivna på binärt språk, 0:or och 1:or). I den här artikeln ska vi studera läsning rad för rad från en fil.
Metod 1: Läs en fil rad för rad med hjälp av readlines()
readlines() används för att läsa alla rader på en gång och sedan returnera dem som varje rad ett strängelement i en lista. Denna funktion kan användas för små filer, eftersom den läser hela filens innehåll till minnet och sedan delar upp det i separata rader. Vi kan iterera över listan och ta bort tecknet ' ' på nyraden med hjälp av funktionen strip().
Exempel:
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()))> |
>
>
Produktion:
Line1: Geeks Line2: for Line3: Geeks>
Tidskomplexiteten för den givna Python-koden är O(n), där n är det totala antalet rader i filen
Kodens hjälputrymmeskomplexitet är O(n), där n är det totala antalet rader i filen.
Metod 2: Läs en fil rad för rad med readline()
readline()-funktionen läser en rad i filen och returnerar den i form av strängen. Det tar en parameter n, som anger det maximala antalet byte som kommer att läsas. Läser dock inte mer än en rad, även om n överstiger radens längd. Det kommer att vara effektivt när man läser en stor fil eftersom istället för att hämta all data på en gång, hämtar den rad för rad. readline() returnerar nästa rad i filen som innehåller ett nyradstecken i slutet. Dessutom, om slutet av filen nås, kommer den att returnera en tom sträng.
Exempel:
STEG FÖR STEG INSTÄLLNINGAR:
- Skapa en lista L med tre strängelement som innehåller nyradstecken.
- Öppna en fil med namnet myfile.txt i skrivläge och tilldela den till variabeln file1.
- Skriv innehållet i listan L till filen med metoden writelines() för filobjektet fil1.
- Stäng filobjektet fil1 med metoden close().
- Öppna filen med namnet myfile.txt i läsläge och tilldela den till variabeln file1.
- Initiera ett variabelantal till 0.
- Starta en oändlig loop.
- Öka variabelantalet med 1 i varje iteration av slingan.
- Läs nästa rad från filobjektet file1 med metoden readline() och tilldela den till variabelraden.
- Kontrollera om radvariabeln är tom. Om den är tom betyder det att slutet av filen har nåtts. Bryt i så fall ut ur loopen med break-satsen.
- Skriv ut värdet på count och innehållet i raden med metoden format() för strängklassen. Metoden strip() används för att ta bort tecknet newline i slutet av raden.
- Stäng filobjektet fil1 med metoden 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()> |
>
>
Produktion:
Line1 Geeks Line2 for Line3 Geeks>
Metod 3: Läs en fil rad för rad med för loop
Ett itererbart objekt returneras av funktionen open() när en fil öppnas. Detta sista sätt att läsa en fil rad för rad inkluderar iteration över ett filobjekt i en loop. Genom att göra detta drar vi fördel av en inbyggd Python-funktion som låter oss iterera över filobjektet implicit med hjälp av en for-loop i kombination med att använda det itererbara objektet. Detta tillvägagångssätt kräver färre rader kod, vilket alltid är den bästa praxis som är värd att följa.
Exempel:
npm ren cache
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()> |
>
>
Produktion:
Using for loop Line1: Geeks Line2: for Line3: Geeks>
Metod 4: Läs en fil rad för rad med hjälp av loop- och listförståelse
En listförståelse består av parenteser som innehåller uttrycket, som exekveras för varje element tillsammans med for-slingan för att iterera över varje element. Här kommer vi att läsa textfilen och skriva ut rådata inklusive det nya radtecknet i en annan utgång, vi tog bort alla nya radtecken från listan.
Exempel
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)> |
>
>
Produktion:
['Geeks ', 'For ', 'Geeks'] ['Geeks', 'For', 'Geeks']>
Med uttalande
I ovanstående tillvägagångssätt, varje gång filen öppnas måste den stängas explicit. Om man glömmer att stänga filen kan det introducera flera buggar i koden, det vill säga många ändringar i filer träder inte i kraft förrän filen stängs ordentligt. För att förhindra detta med uttalande kan användas. With-satsen i Python används i undantagshantering för att göra koden renare och mycket mer läsbar. Det förenklar hanteringen av vanliga resurser som filströmmar. Observera följande kodexempel om hur användningen av with statement gör koden renare. Det finns inget behov av att anropa file.close() när du använder satsen. Själva med uttalandet säkerställer korrekt förvärv och frigörande av resurser.
Exempel:
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()))> |
iPhone emojis på Android-telefon
>
>
Produktion:
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>