GeeksforGeeks
Requisitos previos:
- Modos de acceso
- Abrir un archivo
- Cerrar un archivo
Python proporciona funciones incorporadas para crear, escribir y leer archivos. Hay dos tipos de archivos que se pueden manejar en python, los archivos de texto normal y los archivos binarios (escritos en lenguaje binario, 0s y 1s). En este artículo, vamos a estudiar la lectura línea por línea de un archivo.
Lectura línea por línea
Usando readlines()
readlines() se utiliza para leer todas las líneas de una sola vez y luego devolverlas como cada línea un elemento de cadena en una lista. Esta función se puede utilizar para archivos pequeños, ya que lee todo el contenido del archivo en la memoria y luego lo divide en líneas separadas. Podemos iterar sobre la lista y quitar el carácter de nueva línea ‘\n’ usando la función strip().
Ejemplo:
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()))
Line1: GeeksLine2: forLine3: Geeks
Usando readline()
La función readline() lee una línea del fichero y la devuelve en forma de cadena. Toma un parámetro n, que especifica el número máximo de bytes que se leerán. Sin embargo, no lee más de una línea, incluso si n excede la longitud de la línea. Será eficiente al leer un archivo grande porque en lugar de obtener todos los datos de una sola vez, obtiene línea por línea. readline() devuelve la siguiente línea del archivo que contiene un carácter de nueva línea al final. Además, si se llega al final del archivo, devolverá una cadena vacía.
Ejemplo:
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()
Line1 GeeksLine2 forLine3 Geeks
Usando el bucle for
Un objeto iterable es devuelto por la función open() al abrir un fichero. Esta última forma de leer en un archivo línea por línea incluye iterar sobre un objeto archivo en un bucle for. Al hacer esto estamos aprovechando una función incorporada en Python que nos permite iterar sobre el objeto archivo implícitamente usando un bucle for en una combinación con el uso del objeto iterable. Esta aproximación ocupa menos líneas de código, que es siempre la mejor práctica que merece la pena seguir.
Ejemplo:
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()
Using for loopLine1: GeeksLine2: forLine3: Geeks
Con declaración
En los planteamientos anteriores, cada vez que se abre el archivo es necesario cerrarlo explícitamente. Si uno se olvida de cerrar el archivo, puede introducir varios errores en el código, es decir, muchos cambios en los archivos no entran en vigor hasta que el archivo se cierra correctamente. Para evitar esto se puede utilizar la sentencia With. La sentencia With en Python se utiliza en el manejo de excepciones para hacer el código más limpio y mucho más legible. Simplifica la gestión de recursos comunes como los flujos de archivos. Observe el siguiente ejemplo de código sobre cómo el uso de la sentencia with hace que el código sea más limpio. No hay necesidad de llamar a file.close() cuando se utiliza la sentencia with. La propia sentencia with asegura la correcta adquisición y liberación de recursos.
Ejemplo:
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()))
Using readlines()Line1: GeeksLine2: forLine3: GeeksUsing readline()Line1: GeeksLine2: forLine3: GeeksUsing for loopLine1: GeeksLine2: forLine3: Geeks