Pitón

módulo shutil en Python

módulo shutil en Python
Gestión y manipulación de archivos Los objetos de archivo se consideran una de las tareas más complicadas en todos los lenguajes de programación. Algunos lenguajes de programación nos proporcionan algunas herramientas que abstraen las partes difíciles del manejo de archivos con funciones e interfaces fáciles de usar. Esto es exactamente lo que Python shutil el módulo también lo hace.

Python shutil

El módulo Python shutil permite a un desarrollador usar objetos de archivo muy fácilmente y sin entrar en detalles más profundos sobre cómo funcionan las cosas bajo las sábanas. Este módulo básicamente abstrae la semántica de bajo nivel de crear y administrar objetos de archivo, limpiarlos una vez que se completa su uso y nos permite enfocarnos en la lógica comercial de la aplicación. Veremos muchos ejemplos aquí, comencemos.

Ejemplos con el módulo shutil de Python

Estudiaremos varios ejemplos que demuestran el uso de Python shutil módulo aquí.

Copiar un archivo

Con el copiar archivo() funcionar en shutil módulo, podemos hacer una copia exacta de un archivo existente en cualquier lugar de la máquina. Veamos un programa de muestra para demostrar cómo se puede hacer esto:

importar sistema operativo
importar shutil
file_directory = './ Archivos '
print ('Archivos antes:', os.listdir (directorio_archivo))
shutil.copiar archivo('./ Archivos / hola.TXT', './ Archivos / hola_de nuevo.TXT')
print ('Archivos después de:', os.listdir (directorio_archivo))

Acabamos de copiar un archivo que existe en el directorio dado para clonar el archivo en el mismo directorio. Esto es lo que obtenemos con este comando:

Copia del archivo shutil de Python

Lo bueno de esta función es que la función mencionada también toma como entrada el nombre del nuevo archivo a crear.

Copiar archivos a otro directorio

Es posible copiar un archivo a un nuevo directorio con shutil's Copiar() función. Veámoslo en acción:

importar sistema operativo
importar shutil
print ('Creando un nuevo directorio.')
os.mkdir ('LinuxHint')
print ('Archivos antes:', os.listdir ('LinuxHint'))
shutil.Copiar('./ Archivos / hola.txt ',' LinuxHint ')
print ('Archivos después de:', os.listdir ('LinuxHint'))

Veamos el resultado de este comando:

Copiando archivo a un nuevo directorio

Tenga en cuenta que cuando se copia un archivo con el Copiar() función, los permisos para el archivo también se clonan pero los metadatos del archivo no se copian. Esto significa que cuando verifique cuándo se creó este archivo, mostrará la hora nueva cuando ejecutó este script.

Copiar archivo con metadatos

En la última sección, vimos cómo podíamos hacer una copia del archivo. ¿Qué sucede si desea hacer una clonación exacta de un archivo que implica clonar sus metadatos, así como cuando se creó el archivo, etc.?. Esto también es posible, pero esto puede no funcionar en un sistema basado en POSIX. Veamos un ejemplo de cómo se puede hacer esto:

importar sistema operativo
importar shutil
tiempo de importación
new_directory = 'LinuxHint'
src_file = './ Archivos / hola.TXT'
dest_file = './ LinuxHint / hola.TXT'
def file_metadata (archivo):
stat_info = os.stat (archivo)
print ('Modo:', oct (stat_info.st_mode))
print ('Creado:', hora.ctime (stat_info.st_ctime))
print ('Accedido:', tiempo.ctime (stat_info.st_atime))
print ('Modificado:', hora.ctime (stat_info.st_mtime))
os.mkdir (nuevo_directorio)
print ('Metadatos para el archivo fuente:')
file_metadata (src_file)
shutil.copy2 (src_file, new_directory)
print ('Metadatos para el archivo de destino:')
metadatos_archivo (archivo_destino)

Esto es lo que obtenemos con este comando cuando lo ejecutamos en un sistema basado en POSIX (los metadatos no se clonan por completo):

Copiar archivo con metadatos

En sistemas no basados ​​en POSIX, incluso el tiempo creado y accedido habría coincidido exactamente.

Directorio completo de clonación

En la última sección, vimos cómo podíamos hacer una copia del archivo. Aquí veremos cómo podemos clonar un directorio completo de forma recursiva. Esto significa que si existe otro directorio en el directorio que queremos clonar, también se clonarán.

importar pprint
importar shutil
importar sistema operativo
src_directory = './ Archivos '
dest_directory = './ LinuxHint '
shutil.copytree (directorio_src, directorio_destino)
print ('Contenido de la fuente:')
pprint.pprint (os.listdir (src_directory))
print ('Contenido del destino:')
pprint.pprint (os.listdir (dest_directory))

Veamos el resultado de este comando:

Duplicar un directorio

Tenga en cuenta que el directorio que pasamos a copytree () funciona como El directorio de destino no debe existir antes de ejecutar este programa.

Eliminar un directorio

Eliminar un directorio es muy simple con el rmtree () función en el módulo. Veamos esta función en acción aquí:

importar pprint
importar shutil
importar sistema operativo
delete_directory = 'LinuxHint'
current_directory = '.'
print ('Contenido antes de la eliminación:')
pprint.pprint (os.listdir (directorio_actual))
shutil.rmtree (eliminar_directorio)
print ('Contenido después de la eliminación:')
pprint.pprint (os.listdir (directorio_actual))

Después de ejecutar el script, LinuxHint El directorio se elimina junto con el contenido. Esto es lo que obtenemos con este comando:

Eliminar directorio

Encontrar archivos

Si desea encontrar un archivo que está presente en la variable PATH en su máquina, podemos usar el cual() función para encontrar ese archivo por nombre. Veamos un ejemplo de demostración para esta función:

importar shutil
imprimir (shutil.que ('bsondump'))
imprimir (shutil.que ('no-file-found'))

Esto es lo que obtenemos con este comando:

Buscar archivo en PATH

Supervisión del espacio del sistema de archivos

Con el módulo shutil, tenemos una función disk_usage () a través de la cual también podemos obtener información sobre el espacio en disco de nuestra máquina. Veamos un ejemplo que muestra estos datos de una manera legible por humanos:

importar shutil
total_b, used_b, free_b = shutil.uso del disco('.')
gb = 10 ** 9 # GB == gigabyte
print ('Total: : 6.2f GB '.formato (total_b / gb))
print ('Usado: : 6.2f GB '.formato (used_b / gb))
print ('Gratis: : 6.2f GB '.formato (free_b / gb))

Esto es lo que obtenemos con este comando:

Encontrar espacio en el sistema de archivos

Archivar directorios

Como ejemplo final, veremos cómo podemos archivar un módulo shutil de directorio make_archive () función. Veamos el programa de muestra:

importar shutil
importar sistema operativo
archive_directory = \
os.camino.expanduser (os.camino.unirse ('ruta-directorio-destino', 'linuxhint'))
root_dir = os.camino.expanduser (os.camino.unirse ('~', '.ssh '))
shutil.make_archive (directorio_archivo, 'gztar', directorio_raíz)

Esto es lo que obtenemos con este comando:

Directorio de archivo

Si desarchiva el archivo TAR y echa un vistazo, contendrá todos los .ssh archivos de directorio en él.

Conclusión

En esta lección, analizamos cómo podemos administrar objetos de archivo con operaciones de archivo de alto nivel fácilmente con shutil módulo en Python. Operaciones como copiar el contenido de un archivo, crear una nueva copia de un archivo, etc. parecía fácil con este módulo.

OpenTTD frente a Simutrans
Crear su propia simulación de transporte puede ser divertido, relajante y extremadamente atractivo. Es por eso que debes asegurarte de probar tantos j...
Tutorial de OpenTTD
OpenTTD es uno de los juegos de simulación empresarial más populares que existen. En este juego, necesitas crear un maravilloso negocio de transporte....
SuperTuxKart para Linux
SuperTuxKart es un gran título diseñado para ofrecerte la experiencia Mario Kart de forma gratuita en tu sistema Linux. Es bastante desafiante y diver...