Requisits previs:
Python proporciona funcions integrades per crear, escriure i llegir fitxers. Hi ha dos tipus de fitxers que es poden gestionar en Python, els fitxers de text normals i els fitxers binaris (escrits en llenguatge binari, 0 i 1). En aquest article, estudiarem la lectura línia per línia d'un fitxer.
Mètode 1: llegiu un fitxer línia per línia utilitzant readlines()
readlines() s'utilitza per llegir totes les línies d'una sola vegada i després retornar-les com a cada línia un element de cadena d'una llista. Aquesta funció es pot utilitzar per a fitxers petits, ja que llegeix tot el contingut del fitxer a la memòria i després el divideix en línies separades. Podem recórrer la llista i eliminar el caràcter de nova línia ' ' mitjançant la funció strip().
Exemple:
Python 3
cerca binària en java
# 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()))> |
>
>
Sortida:
Line1: Geeks Line2: for Line3: Geeks>
La complexitat temporal del codi Python donat és O(n), on n és el nombre total de línies del fitxer
La complexitat de l'espai auxiliar del codi és O(n), on n és el nombre total de línies del fitxer.
Mètode 2: llegiu un fitxer línia per línia utilitzant readline()
La funció readline() llegeix una línia del fitxer i la retorna en forma de cadena. Pren un paràmetre n, que especifica el nombre màxim de bytes que es llegiran. Tanmateix, no llegeix més d'una línia, fins i tot si n supera la longitud de la línia. Serà eficaç quan es llegeix un fitxer gran perquè en lloc d'aconseguir totes les dades d'una vegada, s'obté línia per línia. readline() retorna la línia següent del fitxer que al final conté un caràcter de nova línia. A més, si s'arriba al final del fitxer, retornarà una cadena buida.
Exemple:
APROXIMACIÓ PAS A PAS:
cadena per xerrar
- Creeu una llista L amb tres elements de cadena que continguin caràcters de nova línia.
- Obriu un fitxer anomenat myfile.txt en mode d'escriptura i assigneu-lo a la variable file1.
- Escriu el contingut de la llista L al fitxer utilitzant el mètode writelines() de l'objecte del fitxer file1.
- Tanqueu l'objecte fitxer file1 mitjançant el mètode close().
- Obriu el fitxer anomenat myfile.txt en mode de lectura i assigneu-lo a la variable file1.
- Inicialitzar un recompte de variables a 0.
- Inicia un bucle infinit.
- Incrementeu el recompte de variables en 1 a cada iteració del bucle.
- Llegiu la línia següent del fitxer objecte file1 mitjançant el mètode readline() i assigneu-la a la línia variable.
- Comproveu si la variable de línia està buida. Si està buit, vol dir que s'ha arribat al final del fitxer. En aquest cas, sortiu del bucle mitjançant la instrucció break.
- Imprimiu el valor de count i el contingut de la línia utilitzant el mètode format() de la classe de cadena. El mètode strip() s'utilitza per eliminar el caràcter de nova línia al final de la línia.
- Tanqueu l'objecte fitxer file1 mitjançant el mètode close().
Python 3
# 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()> |
>
>
Sortida:
Line1 Geeks Line2 for Line3 Geeks>
Mètode 3: llegiu un fitxer línia per línia utilitzant el bucle for
La funció open() retorna un objecte iterable mentre obre un fitxer. Aquesta última manera de llegir un fitxer línia per línia inclou la iteració d'un objecte de fitxer en un bucle. En fer-ho, estem aprofitant una funció de Python integrada que ens permet iterar sobre l'objecte fitxer de manera implícita utilitzant un bucle for en combinació amb l'ús de l'objecte iterable. Aquest enfocament requereix menys línies de codi, que sempre és la millor pràctica que val la pena seguir.
Exemple:
Python 3
# 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()> |
>
>
Sortida:
Using for loop Line1: Geeks Line2: for Line3: Geeks>
Mètode 4: llegiu un fitxer línia per línia utilitzant per a la comprensió de bucle i llista
Una comprensió de llista consta de claudàtors que contenen l'expressió, que s'executa per a cada element juntament amb el bucle for per iterar sobre cada element. Aquí, llegirem el fitxer de text i imprimirem les dades en brut, inclòs el caràcter de línia nova en una altra sortida que vam eliminar tots els caràcters de línia nous de la llista.
Exemple
Python 3
polimorfisme java
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)> |
>
per què la interfície del marcador a Java
>
Sortida:
['Geeks ', 'For ', 'Geeks'] ['Geeks', 'For', 'Geeks']>
Amb declaració
En els enfocaments anteriors, cada vegada que s'obre el fitxer cal tancar-lo de manera explícita. Si un s'oblida de tancar el fitxer, pot introduir diversos errors al codi, és a dir, molts canvis als fitxers no entren en vigor fins que el fitxer no es tanca correctament. Per evitar-ho, es pot utilitzar una declaració. La instrucció With a Python s'utilitza en el maneig d'excepcions per fer que el codi sigui més net i molt més llegible. Simplifica la gestió de recursos comuns com els fluxos de fitxers. Observeu l'exemple de codi següent sobre com l'ús de la sentència with fa que el codi sigui més net. No cal cridar a file.close() quan s'utilitza amb la instrucció. Amb la declaració en si assegura l'adquisició i l'alliberament adequats dels recursos.
Exemple:
Python 3
# 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()))> |
>
>
Sortida:
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>