Manipulación de archivos y carpetas

PythonPythonBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

Esta práctica está diseñada para ayudarte a entender cómo manipular archivos y carpetas utilizando Python. Utilizaremos los módulos os y glob, que proporcionan una forma de interactuar con el sistema de archivos y realizar operaciones comunes como crear, eliminar y mover archivos y directorios.

Logros

  • Módulo os
  • Módulo glob

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/ErrorandExceptionHandlingGroup(["Error and Exception Handling"]) python(("Python")) -.-> python/FileHandlingGroup(["File Handling"]) python(("Python")) -.-> python/AdvancedTopicsGroup(["Advanced Topics"]) python(("Python")) -.-> python/PythonStandardLibraryGroup(["Python Standard Library"]) python(("Python")) -.-> python/ControlFlowGroup(["Control Flow"]) python(("Python")) -.-> python/ModulesandPackagesGroup(["Modules and Packages"]) python/ControlFlowGroup -.-> python/for_loops("For Loops") python/ModulesandPackagesGroup -.-> python/importing_modules("Importing Modules") python/ModulesandPackagesGroup -.-> python/standard_libraries("Common Standard Libraries") python/ErrorandExceptionHandlingGroup -.-> python/raising_exceptions("Raising Exceptions") python/FileHandlingGroup -.-> python/file_operations("File Operations") python/AdvancedTopicsGroup -.-> python/generators("Generators") python/PythonStandardLibraryGroup -.-> python/os_system("Operating System and System") subgraph Lab Skills python/for_loops -.-> lab-77{{"Manipulación de archivos y carpetas"}} python/importing_modules -.-> lab-77{{"Manipulación de archivos y carpetas"}} python/standard_libraries -.-> lab-77{{"Manipulación de archivos y carpetas"}} python/raising_exceptions -.-> lab-77{{"Manipulación de archivos y carpetas"}} python/file_operations -.-> lab-77{{"Manipulación de archivos y carpetas"}} python/generators -.-> lab-77{{"Manipulación de archivos y carpetas"}} python/os_system -.-> lab-77{{"Manipulación de archivos y carpetas"}} end

Creando carpetas y archivos

A continuación, se muestra un código de Python que crea múltiples grupos de carpetas y archivos de muestra:

import os

## Crea múltiples grupos de carpetas y archivos de muestra
for i in range(3):
    ## Crea una nueva carpeta para cada grupo
    folder_name = "group_" + str(i)
    os.makedirs(folder_name)

    ## Crea archivos de muestra dentro de cada carpeta
    for j in range(3):
        file_name = "file_" + str(j) + ".txt"
        file_path = os.path.join(folder_name, file_name)
        with open(file_path, "w") as file:
            file.write("This is a sample file.")

Puedes abrir create_samples.py en el editor y ejecutar el código para ver los resultados.

os.makedirs(path) es una función del módulo os en Python que crea un directorio en la ruta especificada. En este caso, la path es el folder_name, que se construye concatenando la cadena "group_" con el valor actual de la variable i del bucle for externo, lo que da como resultado "group_0", "group_1" y "group_2".

os.path.join(path1, path2,...) es una función del módulo os.path que une una o más rutas. En este caso, path1 es el folder_name y path2 es el file_name, que se construye concatenando la cadena "file_" con el valor actual de la variable j del bucle for interno, lo que da como resultado "file_0.txt", "file_1.txt" y "file_2.txt". La función os.path.join() se utiliza para concatenar el nombre de la carpeta y el nombre del archivo para crear la ruta de archivo completa para que el archivo se pueda crear dentro de la carpeta.

Al utilizar la función os.path.join, el código asegura que se utilice el separador correcto para el sistema operativo actual para unir los nombres de la carpeta y el archivo, independientemente de si el código se ejecuta en Windows, Linux o macOS.

Más sobre el módulo Os

El módulo os en Python proporciona una forma de interactuar con el sistema operativo, lo que te permite realizar varias tareas como crear y eliminar directorios, leer y escribir archivos y ejecutar comandos.

Abre un nuevo intérprete de Python.

python3

A continuación, se presentan algunos ejemplos de otras funciones útiles proporcionadas por el módulo os:

  • os.listdir(path): Devuelve una lista de todos los archivos y directorios en el directorio especificado.

    os.listdir('.') ## devuelve una lista de todos los archivos y directorios en el directorio actual
  • os.remove(path): Elimina el archivo en la ruta especificada.

    os.remove('file.txt') ## elimina el archivo llamado 'file.txt'
  • os.rmdir(path): Elimina el directorio vacío en la ruta especificada.

    os.rmdir('folder') ## elimina la carpeta vacía llamada 'folder'
  • os.rename(src, dst): Cambia el nombre de un archivo o directorio de la ruta src a la ruta dst.

    os.rename('file1.txt', 'file2.txt') ## cambia el nombre del archivo 'file1.txt' a 'file2.txt'
  • os.chdir(path): Cambia el directorio de trabajo actual a la ruta especificada.

    os.chdir('/home/user/documents') ## cambia el directorio de trabajo actual a '/home/user/documents'
  • os.getcwd(): Devuelve el directorio de trabajo actual.

    os.getcwd() ## devuelve el directorio de trabajo actual, por ejemplo, '/home/user/documents'

Tenga en cuenta que la mayoría de las funciones anteriores generarán una excepción (FileNotFoundError, OSError, etc.) si el archivo o directorio especificado no existe o no tiene los permisos necesarios.

Recorrer un árbol de directorios

os.walk(top, topdown=True, onerror=None, followlinks=False) es una función del módulo os en Python que genera los nombres de archivo en un árbol de directorios al recorrer el árbol de forma ascendente o descendente. Por defecto, os.walk() genera los nombres de archivo en un árbol de directorios de forma descendente. Para cada directorio en el árbol con raíz en el directorio top (incluyendo top mismo), produce una tupla de tres elementos (dirpath, dirnames, filenames).

A continuación, se muestra un ejemplo de cómo se puede usar os.walk() para imprimir todos los archivos en un directorio y sus subdirectorios:

import os

## Imprime todos los archivos en un directorio y sus subdirectorios
for root, dirs, files in os.walk('.'):
    for file in files:
        print(os.path.join(root, file))

Este código comenzará en el directorio actual (indicado por '.') y recorrerá recursivamente todos los subdirectorios, imprimiendo la ruta completa de cada archivo que encuentre.

A continuación, se muestra otro ejemplo donde se puede usar os.walk() para buscar un archivo específico con una extensión específica en un directorio:

import os

def search_file(directory, file_extension):
    for root, dirs, files in os.walk(directory):
        for file in files:
            if file.endswith(file_extension):
                print(os.path.join(root, file))

search_file('.','.txt')

Esto buscará todos los archivos con la extensión '.txt' e imprimirá la ruta completa del archivo.

os.walk() es una función poderosa que se puede usar para muchas tareas, como buscar archivos, analizar estructuras de directorios y más.

Es importante destacar que os.walk es un generador, lo que significa que genera los valores sobre la marcha, en lugar de mantenerlos todos en memoria. Esto lo hace eficiente para manejar árboles de directorios grandes.

El módulo Glob

El módulo glob en Python proporciona una forma de buscar archivos y directorios utilizando caracteres comodín. glob.glob(pathname) devuelve una lista de rutas de archivo que coinciden con el patrón de nombre de ruta especificado.

A continuación, se muestra un ejemplo de cómo se puede usar glob.glob() para encontrar todos los archivos con la extensión ".txt" en el directorio actual:

import glob

txt_files = glob.glob('*.txt')
print(txt_files)

Este código buscará todos los archivos con la extensión ".txt" en el directorio actual y devolverá una lista de rutas de archivo que coinciden con el patrón.

Es similar a la función os.walk(), pero no busca recursivamente a través de los subdirectorios. Solo busca archivos que coincidan con el patrón especificado en el directorio actual.

A continuación, se muestra un ejemplo de cómo se puede usar glob.glob() para encontrar todos los archivos con la extensión ".txt" en todos los subdirectorios:

import glob

txt_files = glob.glob('**/*.txt', recursive=True)
print(txt_files)

Este código buscará todos los archivos con la extensión ".txt" en el directorio actual y todos sus subdirectorios.

En general, glob.glob() es más conveniente cuando solo se buscan archivos en un directorio y sus subdirectorios. Sin embargo, os.walk() es más potente y flexible ya que se puede usar para buscar archivos en múltiples directorios o para analizar la estructura de un árbol de directorios.

Es importante destacar que, al igual que os.walk, glob también es un generador, lo que significa que genera los valores sobre la marcha, en lugar de mantenerlos todos en memoria. Esto lo hace eficiente para manejar grandes cantidades de archivos.

Resumen

En este laboratorio, aprendimos cómo usar Python para manipular archivos y carpetas mediante los módulos os y glob. Vimos cómo crear una nueva carpeta, cambiar el directorio de trabajo actual, crear un nuevo archivo, escribir en un archivo, cerrar un archivo, listar el contenido de un directorio y encontrar archivos que coincidan con un patrón determinado usando glob.