7.2. Manipulación de archivos

Para escribir o leer cadenas de caracteres para/desde archivos (otros tipos deben ser convertidas a cadenas de caracteres). Para esto Python incorpora un tipo integrado llamado file, el cual es manipulado mediante un objeto archivo el cual fue generado a través de una función integrada en Python, a continuación se describen los procesos típicos y sus referencias a funciones propias del lenguaje:

7.2.1. Abrir archivo

La forma preferida para abrir un archivo es usando la función integrada open().

7.2.2. Leer archivo

La forma preferida para leer un archivo es usando algunas de los métodos del tipo objeto file como read(), readline() y readlines().

7.2.3. Escribir archivo

La forma preferida para escribir un archivo es usando el método del tipo objeto file llamado write().

7.2.4. Cerrar archivo

La forma preferida para cerrar un archivo es usando el método del tipo objeto file llamado close().

7.2.5. Archivos con módulo os

El módulo os de Python le permite a usted realizar operaciones dependiente del Sistema Operativo como crear una carpeta, listar contenidos de una carpeta, conocer acerca de un proceso, finalizar un proceso, etc. Este módulo tiene métodos para ver variables de entornos del Sistema Operativo con las cuales Python esta trabajando en mucho más. Aquí la documentación Python para el módulo os.

A continuación algunos útiles métodos del módulo os que pueden ayudar a manipular archivos y carpeta en su programa Python:

Crear una nueva carpeta

>>> import os
>>> os.makedirs("Ana_Poleo")

Listar el contenidos de una carpeta

>>> import os
>>> os.listdir("./")
['Ana_Poleo']

Mostrar el actual directorio de trabajo

>>> import os
>>> os.getcwd()
'/home/usuario/python/'

Mostrar el tamaño del archivo en ``bytes`` del archivo pasado en parámetro

>>> import os
>>> os.path.getsize("Ana_Poleo")
4096

¿Es un archivo el parámetro pasado?

>>> import os
>>> os.path.isfile("Ana_Poleo")
False

¿Es una carpeta el parámetro pasado?

>>> import os
>>> os.path.isdir("Ana_Poleo")
True

Cambiar de directorio

>>> import os
>>> os.chdir("Ana_Poleo")
>>> os.getcwd()
'/home/usuario/python/Ana_Poleo'
>>> os.listdir("./")
[]
>>> os.chdir("../")
>>> os.getcwd()
'/home/usuario/python'

Renombrar un archivo

>>> import os
>>> os.rename("Ana_Poleo", "Ana_Carolina")
>>> os.listdir("./")
['Ana_Carolina']

Eliminar un archivo

>>> import os
>>> os.chdir("Ana_Carolina")
>>> archivo = open(os.getcwd() + "/datos.txt", "w")
>>> archivo.write("¡Se Feliz!")
>>> archivo.close()
>>> os.getcwd()
'/home/usuario/python/Ana_Carolina'
>>> os.listdir("./")
['datos.txt']
>>> os.remove(os.getcwd() + "/datos.txt")
>>> os.listdir("./")
[]

Eliminar una carpeta

>>> os.rmdir("Ana_Carolina")
>>> os.chdir("Ana_Carolina")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OSError: [Errno 2] No such file or directory: 'Ana_Carolina'

Lanza una excepción OSError cuando intenta acceder al directorio que previamente elimino y este no encuentra.

7.2.6. Ejemplos de archivos

A continuación, se presentan algunos ejemplos del uso del tipo objeto file:

Iterar un archivo para leerlo

Usted puede iterar sobre un archivo como se muestra a continuación:

>>> archivo = open("datos.txt", "r")
>>> for linea in archivo:
...     print(linea)
...
Este es una prueba

y otra prueba
>>> archivo.close()

Iterar un archivo con escritura y lectura

Usted puede manipular un archivo con permisos de escritura y lectura, ademas de interactuar de el mismo como se muestra a continuación:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import os

print("\nCrear un archivo")
print("================")

NOMBRE_ARCHIVO = "datos.txt"

archivo = open(NOMBRE_ARCHIVO, "w")  # abre el archivo datos.txt
archivo.write("Este es una prueba \ny otra prueba.")
archivo.close()

if NOMBRE_ARCHIVO in os.listdir("."):
    print(f"\nArchivo creado en la ruta: \n\n\t{os.getcwd()}{os.sep}{NOMBRE_ARCHIVO}")
else:
    print("El archivo no fue creado!!!\n")


print("\n\nLeer un archivo")
print("===============\n")

archivo = open(NOMBRE_ARCHIVO)
contenido = archivo.read()
print(contenido)
archivo.close()


print("\n\nIterar sobre un archivo")
print("=======================\n")

archivo = open(NOMBRE_ARCHIVO)
for linea in archivo:
    print(linea)
print("\n")
archivo.close()


print("\nEliminar un archivo")
print("===================")

print(f"\nEliminado archivo desde la ruta: \n\n\t{os.getcwd()}{os.sep}{NOMBRE_ARCHIVO}")
os.remove(os.getcwd() + os.sep + NOMBRE_ARCHIVO)

7.2.7. Función open()

A continuación se presenta una práctica más real de implementar el uso de la función integrada open() en Python, el cual se implementa para las operaciones de lectura y escritura en archivos``.csv``:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import os

RUTA = os.path.join(os.path.dirname(os.path.abspath(__file__)))

try:
    # Abrir el archivo en modo lectura
    with open(os.path.join(RUTA, "colesterol.csv"), encoding="utf-8") as csv_leido:
        print(f"✅ Archivo leido desde la ruta '{csv_leido.name}'.\n")
        leido = csv_leido.read()
        print(leido)
        # Cerrar el archivo después de leerlo
        csv_leido.close()
    # Agregar una fila al final del archivo
    nuevas_lineas = ["\nLeonardo Caballero,44,M,61.0,1.77,194.0"]
    # Abrir el archivo en modo escritura para agregar nuevas líneas
    with open(
        os.path.join(RUTA, "colesterol_modificado.csv"),
        "w",
        newline="",
        encoding="utf-8",
    ) as csv_nuevo:
        print(f"\n✅ Archivo nuevo creado en la ruta '{csv_nuevo.name}'.\n")
        csv_nuevo.write(leido + "\n".join(nuevas_lineas))
        # Cerrar el archivo después de escribir las nuevas líneas
        csv_nuevo.close()
    # Abrir el archivo en modo lectura para leer las líneas modificadas
    with open(
        os.path.join(RUTA, "colesterol_modificado.csv"), encoding="utf-8"
    ) as csv_leido:
        print(f"{csv_leido.read()}")
        print(f"\n✅ Archivo nuevo leido desde la ruta '{csv_leido.name}'.")
        # Cerrar el archivo después de leerlo
        csv_leido.close()
except FileNotFoundError as e:
    print(f"❌ Error: No se encontró el archivo: {e}")
except Exception as e:
    print(f"❌ Error inesperado: {e}")

Importante

Usted puede descargar el código usado en esta sección haciendo clic en el siguiente enlace:

Truco

Para ejecutar el código main.py, abra una consola de comando, acceda al directorio donde se encuentra el programa:

proyectos/
└── txt/
    ├── colesterol.csv
    └── main.py

Si tiene la estructura de archivo previa, entonces ejecute el siguiente comando:

python3 main.py

La salida esperada será similar a la siguiente:

✅ Archivo leido desde la ruta '~/proyectos/txt/colesterol.csv'.

nombre,edad,sexo,peso,altura,colesterol
José Luis Martínez Izquierdo,18,H,85.0,1.79,182.0
Rosa Díaz Díaz,32,M,65.0,1.73,232.0
Javier García Sánchez,24,H,,1.81,191.0
Carmen López Pinzón,35,M,65.0,1.7,200.0
Marisa López Collado,46,M,51.0,1.58,148.0
Antonio Ruiz Cruz,68,H,66.0,1.74,249.0
Antonio Fernández Ocaña,51,H,62.0,1.72,276.0
Pilar Martín González,22,M,60.0,1.66,
Pedro Gálvez Tenorio,35,H,90.0,1.94,241.0
Santiago Reillo Manzano,46,H,75.0,1.85,280.0
Macarena Álvarez Luna,53,M,55.0,1.62,262.0
José María de la Guía Sanz,58,H,78.0,1.87,198.0
Miguel Angel Cuadrado Gutiérrez,27,H,109.0,1.98,210.0
Carolina Rubio Moreno,20,M,61.0,1.77,194.0

✅ Archivo nuevo creado en la ruta '~/proyectos/txt/colesterol_modificado.csv'.

nombre,edad,sexo,peso,altura,colesterol
José Luis Martínez Izquierdo,18,H,85.0,1.79,182.0
Rosa Díaz Díaz,32,M,65.0,1.73,232.0
Javier García Sánchez,24,H,,1.81,191.0
Carmen López Pinzón,35,M,65.0,1.7,200.0
Marisa López Collado,46,M,51.0,1.58,148.0
Antonio Ruiz Cruz,68,H,66.0,1.74,249.0
Antonio Fernández Ocaña,51,H,62.0,1.72,276.0
Pilar Martín González,22,M,60.0,1.66,
Pedro Gálvez Tenorio,35,H,90.0,1.94,241.0
Santiago Reillo Manzano,46,H,75.0,1.85,280.0
Macarena Álvarez Luna,53,M,55.0,1.62,262.0
José María de la Guía Sanz,58,H,78.0,1.87,198.0
Miguel Angel Cuadrado Gutiérrez,27,H,109.0,1.98,210.0
Carolina Rubio Moreno,20,M,61.0,1.77,194.0
Leonardo Caballero,44,M,61.0,1.77,194.0

✅ Archivo nuevo leido desde la ruta '~/proyectos/txt/colesterol_modificado.csv'.

La estructura de directorio debe ser similar a la siguiente:

proyectos/
└── txt/
    ├── colesterol_modificado.csv
    ├── colesterol.csv
    └── main.py

Truco

En lugar de modificar directamente el archivo colesterol.csv se genera un nuevo archivo llamado colesterol_modificado.csv para almacenar los cambios realizados.

Así de esta forma puede ver un ejemplo práctico de como manipular un archivo .csv con la función integrada open().


7.2.8. Módulo csv

A continuación se presenta una práctica más real de implementar el uso del módulo integrado en Python llamado csv, el cual se implementa para operaciones de archivos .csv:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import csv
import os

RUTA = os.path.join(os.path.dirname(os.path.abspath(__file__)))

try:
    # Abrir el archivo en modo lectura
    with open(os.path.join(RUTA, "colesterol.csv"), encoding="utf-8") as csv_leido:
        print(f"✅ Archivo leido desde la ruta '{csv_leido.name}'.\n")
        reader = csv.reader(csv_leido, delimiter=",")
        filas = list(reader)
        for fila in filas:
            print(fila)
        # Cerrar el archivo después de leerlo
        csv_leido.close()
    # Agregar una fila al final del archivo
    filas.append(["Leonardo Caballero", "44", "H", "61.0", "1.77", "194.0"])
    # Abrir el archivo en modo escritura para agregar nuevas líneas
    with open(
        os.path.join(RUTA, "colesterol_modificado.csv"),
        "w",
        newline="",
        encoding="utf-8",
    ) as csv_nuevo:
        print(f"\n✅ Archivo nuevo creado en la ruta '{csv_nuevo.name}'.\n")
        writer = csv.writer(csv_nuevo, delimiter=",")
        for fila in filas:
            writer.writerow(fila)
        # Cerrar el archivo después de escribir las nuevas líneas
        csv_nuevo.close()
    # Abrir el archivo en modo lectura para leer las líneas modificadas
    with open(
        os.path.join(RUTA, "colesterol_modificado.csv"), encoding="utf-8"
    ) as csv_leido:
        reader = csv.reader(csv_leido, delimiter=",")
        filas = list(reader)
        for fila in filas:
            print(fila)
        print(f"\n✅ Archivo nuevo leido desde la ruta '{csv_leido.name}'.")
        # Cerrar el archivo después de leerlo
        csv_leido.close()
except FileNotFoundError as e:
    print(f"❌ Error: No se encontró el archivo: {e}")
except Exception as e:
    print(f"❌ Error inesperado: {e}")

Importante

Usted puede descargar el código usado en esta sección haciendo clic en el siguiente enlace:

Truco

Para ejecutar el código main.py, abra una consola de comando, acceda al directorio donde se encuentra el programa:

proyectos/
└── csv/
    ├── colesterol.csv
    └── main.py

Si tiene la estructura de archivo previa, entonces ejecute el siguiente comando:

python3 main.py

La salida esperada será similar a la siguiente:

✅ Archivo leido desde la ruta '~/proyectos/csv/colesterol.csv'.

['nombre', 'edad', 'sexo', 'peso', 'altura', 'colesterol']
['José Luis Martínez Izquierdo', '18', 'H', '85.0', '1.79', '182.0']
['Rosa Díaz Díaz', '32', 'M', '65.0', '1.73', '232.0']
['Javier García Sánchez', '24', 'H', '', '1.81', '191.0']
['Carmen López Pinzón', '35', 'M', '65.0', '1.7', '200.0']
['Marisa López Collado', '46', 'M', '51.0', '1.58', '148.0']
['Antonio Ruiz Cruz', '68', 'H', '66.0', '1.74', '249.0']
['Antonio Fernández Ocaña', '51', 'H', '62.0', '1.72', '276.0']
['Pilar Martín González', '22', 'M', '60.0', '1.66', '']
['Pedro Gálvez Tenorio', '35', 'H', '90.0', '1.94', '241.0']
['Santiago Reillo Manzano', '46', 'H', '75.0', '1.85', '280.0']
['Macarena Álvarez Luna', '53', 'M', '55.0', '1.62', '262.0']
['José María de la Guía Sanz', '58', 'H', '78.0', '1.87', '198.0']
['Miguel Angel Cuadrado Gutiérrez', '27', 'H', '109.0', '1.98', '210.0']
['Carolina Rubio Moreno', '20', 'M', '61.0', '1.77', '194.0']

✅ Archivo nuevo creado en la ruta '~/proyectos/csv/colesterol_modificado.csv'.

['nombre', 'edad', 'sexo', 'peso', 'altura', 'colesterol']
['José Luis Martínez Izquierdo', '18', 'H', '85.0', '1.79', '182.0']
['Rosa Díaz Díaz', '32', 'M', '65.0', '1.73', '232.0']
['Javier García Sánchez', '24', 'H', '', '1.81', '191.0']
['Carmen López Pinzón', '35', 'M', '65.0', '1.7', '200.0']
['Marisa López Collado', '46', 'M', '51.0', '1.58', '148.0']
['Antonio Ruiz Cruz', '68', 'H', '66.0', '1.74', '249.0']
['Antonio Fernández Ocaña', '51', 'H', '62.0', '1.72', '276.0']
['Pilar Martín González', '22', 'M', '60.0', '1.66', '']
['Pedro Gálvez Tenorio', '35', 'H', '90.0', '1.94', '241.0']
['Santiago Reillo Manzano', '46', 'H', '75.0', '1.85', '280.0']
['Macarena Álvarez Luna', '53', 'M', '55.0', '1.62', '262.0']
['José María de la Guía Sanz', '58', 'H', '78.0', '1.87', '198.0']
['Miguel Angel Cuadrado Gutiérrez', '27', 'H', '109.0', '1.98', '210.0']
['Carolina Rubio Moreno', '20', 'M', '61.0', '1.77', '194.0']
['Leonardo Caballero', '44', 'H', '61.0', '1.77', '194.0']

✅ Archivo nuevo leido desde la ruta '~/proyectos/csv/colesterol_modificado.csv'.

La estructura de directorio debe ser similar a la siguiente:

proyectos/
└── csv/
    ├── colesterol_modificado.csv
    ├── colesterol.csv
    └── main.py

Truco

En lugar de modificar directamente el archivo colesterol.csv se genera un nuevo archivo llamado colesterol_modificado.csv para almacenar los cambios realizados.

Así de esta forma puede ver un ejemplo práctico de como manipular un archivo .csv con el módulo csv.


7.2.9. Librería pandas

A continuación se presenta una práctica más real de implementar el uso de la librería externa en Python llamada pandas, el cual se implementa para operaciones de archivos .csv:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import os
import pandas as pd

RUTA = os.path.dirname(os.path.abspath(__file__)) + os.sep

try:
    # Abrir el archivo CSV y leerlo en un DataFrame
    df = pd.read_csv(os.path.join(RUTA, "colesterol.csv"), sep=",", decimal=",")
    print(
        f"✅ El conjunto de datos en la ruta '{os.path.join(RUTA, 'colesterol.csv')}' fue cargado correctamente.\n"
    )
    # Mostrar las primeras 5 filas del DataFrame
    print(df.head())
    print(f"\n📜 El conjunto de datos original contiene '{len(df)}' lineas.")
except FileNotFoundError as e:
    print(
        f"❌ Error: No se encontró el archivo en la ruta '{os.path.join(RUTA, 'colesterol.csv')}': {e}"
    )
except pd.errors.EmptyDataError as e:
    print(
        f"❌ Error: El archivo está vacío, en la ruta '{os.path.join(RUTA, 'colesterol.csv')}': {e}"
    )
except Exception as e:
    print(f"❌ Error inesperado: {e}")

Importante

Usted puede descargar el código usado en esta sección haciendo clic en el siguiente enlace:

Truco

Para ejecutar el código main.py, abra una consola de comando, acceda al directorio donde se encuentra el programa:

proyectos/
└── pandas/
    ├── colesterol.csv
    └── main.py

Si tiene la estructura de archivo previa, entonces ejecute el siguiente comando:

python3 main.py

La salida esperada será similar a la siguiente:

✅ El conjunto de datos en la ruta '~/proyectos/pandas/colesterol.csv' fue cargado correctamente.

                        nombre  edad sexo  peso altura colesterol
0  José Luis Martínez Izquierdo    18    H  85.0   1.79      182.0
1                Rosa Díaz Díaz    32    M  65.0   1.73      232.0
2         Javier García Sánchez    24    H   NaN   1.81      191.0
3           Carmen López Pinzón    35    M  65.0    1.7      200.0
4          Marisa López Collado    46    M  51.0   1.58      148.0

📜 El conjunto de datos original contiene '14' lineas.

Así de esta forma puede ver un ejemplo práctico de como manipular un archivo .csv con el módulo pandas.


7.2.10. Ayuda integrada

Usted puede consultar toda la documentación disponible sobre los tipos objeto file desde la consola interactiva de la siguiente forma:

>>> help(file)

Para salir de esa ayuda presione la tecla Q.

Importante

Usted puede descargar el código usado en esta sección haciendo clic aquí.

Truco

Para ejecutar el código archivo.py, abra una consola de comando, acceda al directorio donde se encuentra el mismo, y ejecute el siguiente comando:

python3 archivo.py

Ver también

Consulte la sección de lecturas suplementarias del entrenamiento para ampliar su conocimiento en esta temática.



¿Cómo puedo ayudar?

¡Mi soporte está aquí para ayudar!

Mi horario de oficina es de lunes a sábado, de 9 AM a 5 PM. UTM - Madrid, España.

La hora aquí es actualmente 7:35 PM UTM.

Mi objetivo es responder a todos los mensajes dentro de un día hábil.

Contrata mi increíble soporte profesional