🇯🇵 日本語 | 🇺🇸 English | 🇪🇸 Español | 🇵🇹 Português | 🇹🇭 ไทย | 🇨🇳 中文

¡Domina el Manejo de Archivos en Python! Guía Completa desde E/S Básica hasta Técnicas Avanzadas

Para ejecutar Python desde el símbolo del sistema o PowerShell en tu PC, necesitas descargar e instalar Python.
Si aún no lo has hecho, consulta el artículo Instalación de Python y configuración del entorno de desarrollo para instalar Python.

Cuando programas, inevitablemente te encontrarás con situaciones en las que quieres guardar los resultados de tu programa en un archivo o leer datos de un archivo de texto externo. Con Python, estas operaciones de archivo son sorprendentemente fáciles. ¡Este artículo ofrece una guía completa para creadores web sobre los fundamentos de la lectura y escritura de archivos (E/S), desde lo más básico hasta ejemplos avanzados, con código que puedes copiar y pegar para verlo funcionar!

Al terminar de leer este artículo, podrás manejar archivos en Python con confianza. ¡Vamos a experimentar y hacerlo funcionar! 🚀


Primeros Pasos en Operaciones con Archivos: La Función `open()` y la Declaración `with`

Para manejar archivos en Python, comienzas usando la función integrada open() para acceder al archivo de destino. Un concepto crucial que debes recordar es la declaración with. Usar una declaración with asegura que el archivo se cierre automáticamente cuando termines, evitando que te olvides de cerrarlo. Se considera una práctica estándar en Python, así que aprendámoslos juntos.

La función open() necesita principalmente dos datos:

Los tres modos más básicos son:

Además, al manejar caracteres especiales como en español (ñ, tildes), es una práctica común especificar encoding='utf-8' para prevenir texto corrupto. ¡Ahora, veámoslo en acción!


Leer Archivos: Importar Datos a Python

Primero, veamos cómo leer el contenido de un archivo de texto. Asumiremos que tienes un archivo llamado sample.txt con el siguiente contenido en el mismo directorio que tu script de Python.

¡Hola, Python!
Este es un archivo de texto de ejemplo.
Aprendamos a manejar archivos.

read(): Leer el Archivo Completo de una Vez

El método read() obtiene todo el contenido de un archivo y lo devuelve como una única gran cadena de texto. Es ideal para archivos pequeños.

<!-- Código Python -->
try:
    with open('sample.txt', 'r', encoding='utf-8') as f:
        content = f.read()
        print(content)
except FileNotFoundError:
    print('Error: sample.txt no encontrado.')

<!-- Salida Esperada -->
# ¡Hola, Python!
# Este es un archivo de texto de ejemplo.
# Aprendamos a manejar archivos.

readlines(): Leer Línea por Línea en una Lista

El método readlines() devuelve una lista donde cada línea es un elemento. Ten en cuenta que cada línea incluirá el carácter de nueva línea (\n) al final.

<!-- Código Python -->
try:
    with open('sample.txt', 'r', encoding='utf-8') as f:
        lines = f.readlines()
        print(lines)
except FileNotFoundError:
    print('Error: sample.txt no encontrado.')

<!-- Salida Esperada -->
# ['¡Hola, Python!\n', 'Este es un archivo de texto de ejemplo.\n', 'Aprendamos a manejar archivos.\n']

Bucle `for`: Leer Archivos Grandes de Forma Eficiente

Si un archivo es muy grande, leerlo todo en la memoria de una vez con read() o readlines() es ineficiente. En tales casos, la mejor práctica es procesar el archivo línea por línea usando un bucle for. Este es el método más eficiente en cuanto a memoria.

<!-- Código Python -->
try:
    with open('sample.txt', 'r', encoding='utf-8') as f:
        for line in f:
            # print() añade su propio salto de línea, así que eliminamos el original
            print(line.strip())
except FileNotFoundError:
    print('Error: sample.txt no encontrado.')

<!-- Salida Esperada -->
# ¡Hola, Python!
# Este es un archivo de texto de ejemplo.
# Aprendamos a manejar archivos.

Escribir en Archivos: Guardar Datos desde Python

A continuación, veamos cómo escribir datos generados en Python en un archivo. Presta atención a la diferencia entre los modos 'w' (escritura) y 'a' (anexar).

write(): Escribir en un Archivo Nuevo (Modo Escritura)

Cuando abres un archivo en modo 'w', se crea un nuevo archivo si no existe. Si existe, su contenido se borra por completo. Usas el método write() para escribir cadenas de texto.

Nota: write() no añade automáticamente un salto de línea. Si quieres una nueva línea, debes añadir el carácter de nueva línea \n tú mismo al final de la cadena.

<!-- Código Python -->
# Lista con el contenido a escribir
lines_to_write = [
    'Este es un archivo nuevo.\n',
    'Estamos escribiendo con el método write().\n',
    'Los saltos de línea necesitan \\n.\n'
]

with open('output.txt', 'w', encoding='utf-8') as f:
    for line in lines_to_write:
        f.write(line)

print('Se ha escrito en output.txt correctamente.')

# Después de ejecutar este código, se creará un archivo llamado 'output.txt'
# con el siguiente contenido:
# 
# Este es un archivo nuevo.
# Estamos escribiendo con el método write().
# Los saltos de línea necesitan \n.

write(): Añadir a un Archivo Existente (Modo Anexar)

Usar el modo 'a' te permite añadir nuevos datos al final de un archivo existente sin borrar su contenido actual. Esto es útil para cosas como archivos de registro (logs), donde quieres acumular datos.

<!-- Código Python -->
# Añadimos contenido al archivo 'output.txt' que creamos antes
with open('output.txt', 'a', encoding='utf-8') as f:
    f.write('Esta es una línea añadida.\n')

print('Se ha añadido contenido a output.txt correctamente.')

# Después de ejecutar este código, el contenido de 'output.txt' será:
# 
# Este es un archivo nuevo.
# Estamos escribiendo con el método write().
# Los saltos de línea necesitan \n.
# Esta es una línea añadida.

Ejemplo Avanzado: Generar un Archivo HTML con Python

Apliquemos lo que hemos aprendido a un ejemplo relevante para los creadores web. Aquí tienes un script de ejemplo que genera dinámicamente un archivo HTML. Crearemos una tarjeta de perfil simple en HTML basada en datos de un diccionario.

Ejecutar el siguiente código de Python generará un archivo llamado profile.html. Este es un 'ejemplo de HTML completo y ejecutable'.

Paso 1: El Código Python para Generar HTML

Guarda este código con un nombre como generate_html.py y ejecútalo.

<!-- Código Python: generate_html.py -->
# Datos del perfil
profile_data = {
    'name': 'Juan Pérez',
    'job': 'Desarrollador Web',
    'skills': ['HTML', 'CSS', 'JavaScript', 'Python'],
    'message': '¡Con Python, puedes generar HTML dinámicamente como esto!'
}

# Generar HTML para la lista de habilidades
skill_list_html = ''
for skill in profile_data['skills']:
    skill_list_html += f'          <li>{skill}</li>\n'

# La plantilla HTML completa
html_template = f"""
<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Perfil Generado</title>
    <style>
        body {{
            font-family: sans-serif;
            background-color: #121212;
            color: #e0e0e0;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 0;
        }}
        .card {{
            background-color: #1e1e1e;
            border-radius: 10px;
            box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3);
            padding: 2rem;
            width: 350px;
            border: 1px solid #5f6368;
        }}
        h1 {{
            color: #669df6;
            text-align: center;
        }}
        h2 {{
            color: #8ab4f8;
            border-bottom: 1px solid #5f6368;
            padding-bottom: 0.5rem;
        }}
        ul {{
            list-style: none;
            padding: 0;
        }}
        li {{
            background-color: #333;
            border-radius: 5px;
            padding: 0.5rem 1rem;
            margin-bottom: 0.5rem;
        }}
        p {{
            line-height: 1.6;
        }}
    </style>
</head>
<body>
    <div class="card">
        <h1>{profile_data['name']}</h1>
        <p>{profile_data['job']}</p>

        <h2>Habilidades</h2>
        <ul>
{skill_list_html}
        </ul>

        <h2>Mensaje</h2>
        <p>{profile_data['message']}</p>
    </div>
</body>
</html>
"""

# Escribir en el archivo
file_path = 'profile.html'
with open(file_path, 'w', encoding='utf-8') as f:
    f.write(html_template)

print(f"Se ha generado '{file_path}'. Ábrelo en tu navegador para comprobarlo.")

Paso 2: El Archivo HTML Generado (`profile.html`)

Cuando ejecutas el código de Python anterior, se creará un archivo profile.html con el siguiente contenido. Intenta abrir este archivo en un navegador web. Deberías ver una bonita tarjeta de perfil compatible con el modo oscuro.

<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Perfil Generado</title>
    <style>
        body {
            font-family: sans-serif;
            background-color: #121212;
            color: #e0e0e0;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 0;
        }
        .card {
            background-color: #1e1e1e;
            border-radius: 10px;
            box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3);
            padding: 2rem;
            width: 350px;
            border: 1px solid #5f6368;
        }
        h1 {
            color: #669df6;
            text-align: center;
        }
        h2 {
            color: #8ab4f8;
            border-bottom: 1px solid #5f6368;
            padding-bottom: 0.5rem;
        }
        ul {
            list-style: none;
            padding: 0;
        }
        li {
            background-color: #333;
            border-radius: 5px;
            padding: 0.5rem 1rem;
            margin-bottom: 0.5rem;
        }
        p {
            line-height: 1.6;
        }
    </style>
</head>
<body>
    <div class="card">
        <h1>Juan Pérez</h1>
        <p>Desarrollador Web</p>

        <h2>Habilidades</h2>
        <ul>
          <li>HTML</li>
          <li>CSS</li>
          <li>JavaScript</li>
          <li>Python</li>

        </ul>

        <h2>Mensaje</h2>
        <p>¡Con Python, puedes generar HTML dinámicamente como esto!</p>
    </div>
</body>
</html>

Puntos a Considerar y Mejores Prácticas

Las operaciones con archivos son potentes, pero hay algunas cosas con las que tener cuidado.


Resumen y Próximos Pasos

En este artículo, cubrimos los conceptos básicos de lectura y escritura de archivos en Python. Dominar la sintaxis with open() hará que la persistencia de datos y la integración con datos externos sea mucho más fácil.

  • La forma básica de abrir un archivo es with open('nombre_archivo', 'modo', encoding='utf-8') as f:
  • Para leer, elige entre read(), readlines() y un bucle for según tus necesidades.
  • Para escribir, usa write() y distingue entre 'w' (sobrescribir) y 'a' (anexar).
  • Al manejar texto no ASCII, ¡encoding='utf-8' es esencial!

Una vez que te sientas cómodo con las operaciones de archivos, lo siguiente que debes aprender es el manejo de errores. Saber cómo lidiar con situaciones como un archivo no encontrado es esencial para construir programas estables. Te animamos a aprender sobre ello en nuestro próximo artículo.

Dominando el Manejo de Excepciones en Python (try-except)