Cómo manejar archivos en Python

En cualquier lenguaje de programación, el manejo de archivos es un aspecto importante. Y Python también admite trabajar con archivos en diferentes modos, como lectura y escritura en archivos, y más.

Al final de este tutorial, podrá:

  • abrir y leer archivos en Python,
  • leer líneas de un archivo de texto,
  • escribir y agregar a archivos, y
  • use administradores de contexto para trabajar con archivos en Python.

Cómo leer archivos en Python

Para abrir un archivo en Python, puede usar la sintaxis general: open(‘file_name’,’mode’).

  • Aquí, file_name es el nombre del archivo.

Nota: si el archivo que desea abrir se encuentra en el directorio de trabajo actual, solo puede mencionar el nombre del archivo. Si está en otra carpeta de su entorno de trabajo, debe incluir la ruta del archivo.

  • El modo de parámetro especifica el modo en el que le gustaría abrir el archivo.

El modo predeterminado para abrir un archivo es lectura, indicado por la letra ‘r’. Sin embargo, es una práctica recomendada especificar el modo explícitamente.

Antes de comenzar, echemos un vistazo al archivo lib.txt, que usaremos en este ejemplo.

📁 Descargue el archivo de texto y el código utilizado en este tutorial desde este repositorio de GitHub.

El fragmento de código a continuación muestra cómo puede abrir un archivo de texto ‘lib.txt’ en Python usando la función open() y leer su contenido.

file = open('lib.txt','r')
contents = file.read()
print(contents)
file.close()


# Output
Hello, there!
Here are a few helpful Python libraries:
1) NumPy
2) pandas
3) matplotlib
4) seaborn
5) scikit-learn
6) BeautifulSoup
7) Scrapy
8) nltk
9) Bokeh
10) statsmodels

En el ejemplo anterior,

  • La función open() devuelve un objeto de archivo y elegimos llamarlo archivo.
  • A continuación, llamamos al método read() en el archivo.
  • El contenido de la variable ahora contiene el contenido del archivo. Y lo imprimimos.
  • Finalmente, cerramos el archivo.

Sin embargo, si olvida cerrar el archivo, habrá un posible desperdicio de recursos. Si está trabajando con una gran cantidad de estos archivos, puede haber un uso considerable de la memoria. Esto se debe a que ha abierto varios archivos pero no ha cerrado ninguno.

Ahora, aprendamos una mejor manera de abrir archivos usando administradores de contexto. El fragmento de código a continuación muestra cómo puede usarlos.

with open('lib.txt','r') as f:
  contents = f.read()
  print(contents)

Cuando usa administradores de contactos para trabajar con archivos, no tiene que usar el método close(). Los archivos se cierran automáticamente una vez finalizada la operación de E/S.

Cómo leer líneas de un archivo en Python

En nuestro archivo de texto de muestra, solo teníamos unas pocas líneas. Entonces, leer todo el contenido del archivo a la vez no fue un problema.

Sin embargo, cuando necesite leer archivos grandes, usar el método read(), como se muestra arriba, puede no ser muy eficiente.

De hecho, si el archivo de texto es de un tamaño muy grande, es posible que pronto se quede sin memoria. Por eso es posible que desee leer en líneas de solo lectura de un archivo de texto, y aprenderá cómo hacerlo en esta sección.

Uso del método readline() de Python para leer líneas de un archivo

El método readline() lee una línea a la vez, del archivo.

Ejecute el siguiente fragmento de código.

with open('lib.txt','r') as f:
  line = f.readline()
  print(line)
  line = f.readline()
  print(line)


# Output
Hello, there!

Here are a few helpful Python libraries:

Puede ver que después de la primera llamada al método readline(), se imprime la primera línea del archivo. Y la segunda llamada al método readline() devuelve la segunda línea del archivo.

Esto se debe a que, después de la primera llamada al método, el puntero del archivo se encuentra al comienzo de la segunda línea.

En Python, puede usar el método tell() para obtener la ubicación actual del puntero del archivo. Y para mover el puntero del archivo a una ubicación específica, puede usar el método seek().

En el fragmento de código a continuación, usamos f.seek(0) después de la primera llamada al método. Esto mueve el puntero del archivo al principio del archivo de texto. Por eso, en ambas ocasiones, se imprime la primera línea del archivo.

with open('lib.txt','r') as f:
  line = f.readline()
  print(line)
  f.seek(0)
  line = f.readline()
  print(line)


# Output
Hello, there!

Hello, there!

Uso del método readlines() de Python para leer líneas de un archivo

Hay otro método estrechamente relacionado llamado readlines().

Cuando ejecute el siguiente fragmento de código, verá que el método readlines() devuelve una lista de todas las líneas del archivo.

with open('lib.txt','r') as f:
  lines = f.readlines()
  print(lines)


# Output
['Hello, there!n', 'Here are a few helpful Python libraries:n', 
'1) NumPyn', '2) pandasn', '3) matplotlibn', 
'4) seabornn', '5) scikit-learnn', '6) BeautifulSoupn', 
'7) Scrapyn', '8) nltkn', '9) Bokehn', '10) statsmodelsn', 'n']

Usando Python’s for Loop para leer líneas del archivo

Para leer las líneas de un archivo de texto, también puede usar el bucle for.

Una vez que tenga un objeto de archivo, puede usar for loop para iterar a través del contenido del archivo, una línea a la vez e imprimirlo, como se muestra a continuación. Observe cómo accedemos solo a una línea a la vez y no leemos el contenido completo del archivo.

with open('lib.txt','r') as f:
  for line in f:
    print(line, end='')

Nota: cuando se utiliza la función print() de Python, el separador predeterminado es un carácter de nueva línea: ‘n’. Pero en el archivo original, no tenemos estas nuevas líneas. Así que establezca el argumento del separador en una cadena vacía: end = ” para imprimir el contenido del archivo tal como está.

Cómo leer fragmentos de contenido de un archivo en Python

En Python, también puede optar por leer el contenido del archivo en términos de pequeños fragmentos.

Lea el código a continuación:

  • Aquí, establecemos chunk_size en 50. Esto significa que se leerán los primeros 50 caracteres del archivo y también los imprimiremos.
  • Ahora, llame al método tell() en el objeto de archivo f. Puede ver que el puntero del archivo ahora está en la posición 51, que es como se esperaba.
chunk_size = 50
with open('lib.txt','r') as f:
  chunk = f.read(chunk_size)
  print(chunk)
  current = f.tell()
  print(f"Current position of file pointer: {current}")

# Output
Hello, there!
Here are a few helpful Python librar
Current position of file pointer: 51

También puede usar esta técnica para leer el archivo completo en pequeños fragmentos.

El siguiente fragmento de código muestra cómo puede hacerlo.

chunk_size = 50
with open('lib.txt','r') as f:
  chunk = f.read(chunk_size)
  print(chunk,end='')

  while(len(chunk)>0):
    chunk = f.read(chunk_size)
    print(chunk,end='')

# Output
Hello, there!
Here are a few helpful Python libraries:
1) NumPy
2) pandas
3) matplotlib
4) seaborn
5) scikit-learn
6) BeautifulSoup
7) Scrapy
8) nltk
9) Bokeh
10) statsmodels

Aquí, usamos un bucle while para leer el contenido del archivo. Leemos el contenido del archivo en trozos de tamaño 50 hasta llegar al final del archivo. ✅

Cómo escribir en un archivo en Python

Para escribir en un archivo de texto en Python, debe abrirlo en el modo de escritura, especificando ‘w’.

El fragmento de código a continuación muestra cómo hacerlo.

with open('new_file.txt','w') as f:
  f.write('Hello, Python!')

Verá que se ha creado ‘new_file.txt’ en su directorio de trabajo.

Ahora, ejecute la celda de código anterior una vez más.

En tu terminal ejecuta el siguiente comando:

cat new_file.txt

# Output: Hello, Python!

Idealmente, hemos escrito en el archivo dos veces. Así que ¡Hola, Pitón! debería haber sido impreso dos veces, ¿sí?

Pero verás que se ha impreso una sola vez. Bueno, esto se debe a que cuando abre un archivo en modo de escritura (w), básicamente sobrescribe el contenido del archivo con contenido nuevo.

Si desea agregar al final del archivo sin sobrescribir el contenido existente, debe abrir el archivo en el modo de adición. Y verá cómo hacerlo en la siguiente sección.

Cómo agregar a un archivo en Python

Si desea agregar contenido a un archivo, sin sobrescribirlo, ábralo en el modo de agregar.

Para hacer esto, use `’a’—a para agregar—y especifique el modo explícitamente.

A continuación, ejecute la siguiente celda de código dos veces.

with open('new_file.txt','a') as f:
  f.write('Hello, Python!')

Observe cómo el texto se imprime dos veces ahora, tal como lo adjuntamos al archivo.

cat new_file.txt

# Output: Hello, Python!Hello, Python!

Conclusión

Resumamos rápidamente lo que hemos repasado en este tutorial.

  • Ha aprendido las operaciones comunes de E/S de archivos, como leer, escribir y agregar a un archivo.
  • Además, también aprendió a usar el método seek() para mover el puntero del archivo a una posición específica y
  • cómo usar el método tell() para recuperar la posición actual del puntero del archivo.

Espero que hayas encontrado útil este tutorial. Ahora que ha aprendido a trabajar con archivos de texto en Python, aprenda a trabajar con archivos JSON en Python.

Relacionado:

Comprueba la longitud de una lista en Python en 3 pasos.