Fundamentos del sistema de archivos en Python
Trabajar con el sistema de archivos es una de las tareas más comunes en el desarrollo con Python. Este proceso incluye crear y eliminar archivos, copiarlos, moverlos, renombrarlos, así como crear directorios y verificar su existencia. Las operaciones con archivos son la base fundamental para la automatización de procesos, el desarrollo web, el análisis de datos, la gestión de configuraciones y el despliegue de aplicaciones.
Python ofrece un amplio conjunto de bibliotecas integradas para trabajar eficientemente con el sistema de archivos. Las herramientas principales son los módulos os, shutil y pathlib. Estas bibliotecas cubren prácticamente todos los escenarios de uso posibles, desde operaciones básicas hasta tareas avanzadas.
Cómo mover archivos en Python
Usando la función shutil.move()
Cuando necesitas mover un archivo de un directorio a otro, la forma más simple y eficaz es usar la función shutil.move(). Esta función funciona de manera similar al comando mv en los sistemas operativos Linux y Unix.
import shutil
shutil.move('source/file.txt', 'destination/file.txt')
La función shutil.move() maneja automáticamente tanto archivos individuales como directorios completos. Al mover un archivo, también puedes renombrarlo al mismo tiempo. Es importante tener en cuenta que si ya existe un archivo con el mismo nombre en la carpeta de destino, se sobrescribirá sin previo aviso.
Crear directorios al mover archivos
Al mover archivos, a menudo es necesario crear nuevos directorios. El siguiente enfoque resuelve este problema:
import os
import shutil
src = 'data/report.txt'
dst_dir = 'archive'
os.makedirs(dst_dir, exist_ok=True)
shutil.move(src, os.path.join(dst_dir, 'report.txt'))
La función os.makedirs() con el parámetro exist_ok=True crea una cadena de directorios si no existen y no genera un error si los directorios ya están presentes.
Mover directorios completos
La función shutil.move() también permite mover directorios enteros:
shutil.move('old_folder', 'new_location/old_folder')
Cómo copiar archivos y crear enlaces
Copia básica de archivos
Para copiar archivos, Python ofrece varias funciones con diferentes funcionalidades:
import shutil
# Copiar el contenido del archivo
shutil.copy('file.txt', 'backup/file.txt')
La función copy() solo copia el contenido del archivo, pero no conserva los metadatos. Para una copia completa que mantenga todos los atributos del archivo, se usa copy2():
shutil.copy2('file.txt', 'backup/file.txt')
Copia de directorios completos
Para copiar directorios enteros con todo su contenido, se utiliza la función copytree():
shutil.copytree('project', 'project_backup')
Creación de enlaces duros
Un enlace duro es un nombre adicional para un archivo existente en el sistema de archivos:
import os
os.link('file.txt', 'linked_file.txt')
Un enlace duro significa que un mismo archivo físico es accesible desde varias rutas diferentes. Los cambios en el contenido del archivo se reflejan en todos los enlaces. La cantidad de enlaces duros se puede verificar con os.stat().st_nlink.
Gestión de directorios
Creación de directorios
Python ofrece dos funciones principales para crear directorios:
import os
# Crear un solo directorio
os.mkdir('new_folder')
# Crear una estructura anidada de directorios
os.makedirs('parent/child/grandchild', exist_ok=True)
La función mkdir() crea solo un directorio y lanza una excepción FileExistsError si el directorio ya existe.