logo

Módulo Shutil en Python

En este tutorial, aprenderemos sobre el módulo Shutil en Python. Analizaremos cómo podemos realizar operaciones de archivos de alto nivel, como crear un nuevo archivo de copia, archivarlo y copiar el contenido de un archivo a otro usando el script Python. Hagamos una introducción básica del módulo Shutil.

Módulo Shutil de Python

El módulo Python Shutil proporciona la posibilidad de realizar operaciones de archivos de alto nivel. Puede operar con el objeto archivo y nos ofrece la posibilidad de copiar y eliminar los archivos. Maneja la semántica de bajo nivel, como crear y cerrar objetos de archivo después de realizar todas las operaciones.

Funcionamiento del módulo Shutil

El módulo Python Shutil viene con muchos métodos integrados. Exploraremos algunos métodos importantes. Para comenzar a trabajar con este módulo, primero debemos importarlo en nuestro archivo Python actual.

Copiar archivos

Este módulo proporciona la Copiar() Función que se utiliza para copiar datos de un archivo a otro. Los archivos deben estar en el mismo directorio y el archivo de destino debe poder escribirse. Entendamos la siguiente sintaxis.

Sintaxis-

 shutil.copyfile(source, destination, *, follow_symlinks = True) 

Parámetro:

En la sintaxis anterior -

  • El primer argumento es fuente, que muestra la ruta del archivo fuente.
  • El segundo argumento es destino, que muestra la ruta del archivo de destino.
  • El tercer argumento es opcional; el valor predeterminado de este parámetro es verdadero.
  • Devuelve una cadena que muestra la ruta del archivo recién creado.

Entendamos el siguiente ejemplo.

Ejemplo -

 import os import shutil # Creating a new folder in the current directory os.mkdir('javatpoint') # It will show the empty folder print('Empty Folder:', os.listdir('javatpoint')) # testcompare.py file will be copied in the javatpoint folder shutil.copy('testcompare.py', 'javatpoint') # After coping the file folder shows the file print('File Copied Name:', os.listdir('javatpoint')) 

Producción:

 Empty Folder: [] File Copied Name: ['testcompare.py'] 

Explicación -

La función copy() toma el nombre del directorio como argumento. Aquí el metadatos no se copia, el archivo copiado se considerará como el archivo recién creado. Este método también clonó todos los permisos del archivo. Una cosa a tener en cuenta es que si el archivo de destino ya existe, será reemplazado por el archivo de origen.

java ordenando una lista de matrices

Veamos otro ejemplo.

Ejemplo: 2 si un destino es un directorio

 import os import shutil # hello.txt file will be copied source = r'D:Python Projectjavatpointhello.txt' # In the newly created foloder destination = r'D:Python ProjectNewFile' # Storing the new path of hello.txt file dest = shutil.copy(source, destination) # Print the new path print(dest) 

Producción:

 D:Python ProjectNewFilehello.txt 

Como hemos mencionado, la función copy() no copia los metadatos. Pero usaremos el copiar2() Función que nos permite copiar el archivo incluyendo sus metadatos.

Ejemplo - 3: Manejo de errores al usar el método de copia

 # importing shutil module import shutil # It is a source path source = r'D:Python ProjectNewFolder' # It is a destination path destination = r'D:Python ProjectNewFolder' try: shutil.copy(source, destination) print('File copied successfully.') # If the given source and path are same except shutil.SameFileError: print('Source and destination represents the same file.') # If there is no permission to write except PermissionError: print('Permission denied.') # For other errors except: print('Error occurred while copying file.') 

Producción:

 Source and destination represents the same file. 

La función copy2()

Esta función es similar a la Copiar() función. También puede copiar el contenido de un archivo a otro, pero la única diferencia es que puede conservar los metadatos del archivo. Entendamos la siguiente sintaxis.

Sintaxis:

 shutil.copy2(source, destination, *, follow_symlinks = True) 

Parámetro:

En la sintaxis anterior -

  • El primer argumento es fuente, que muestra la ruta del archivo fuente.
  • El segundo argumento es destino, que muestra la ruta del archivo de destino.
  • El tercer argumento es opcional; el valor predeterminado de este parámetro es verdadero.
  • Devuelve una cadena que muestra la ruta del archivo recién creado.

Entendamos el siguiente ejemplo.

Ejemplo -

 import os import shutil # hello.txt file will be copied source = r'D:Python Projectjavatpointhello.txt' metadata = os.stat(source) print(metadata) # In the newly created foloder destination = r'D:Python ProjectNewFile' # Storing the new path of hello.txt file dest1 = shutil.copy2(source, destination) metadata = os.stat(dest1) print('After copying file') print(metadata) # Print the new path print(dest1) 

Producción:

 os.stat_result(st_mode=33206, st_ino=562949953459285, st_dev=3029671014, st_nlink=1, st_uid=0, st_gid=0, st_size=17, st_atime=1622815671, st_mtime=1622705607, st_ctime=1622705607) After copying file os.stat_result(st_mode=33206, st_ino=562949953459287, st_dev=3029671014, st_nlink=1, st_uid=0, st_gid=0, st_size=17, st_atime=1622815748, st_mtime=1622705607, st_ctime=1622706243) D:Python ProjectNewFilehello.txt 

La función Shutil.copyfile()

Este método se utiliza para copiar el contenido del archivo de origen al archivo de destino, excepto los metadatos. El origen y el destino deben tener un archivo y el archivo de destino debe proporcionar permiso de escritura. Si ya hay un archivo de destino presente, será reemplazado por el nuevo archivo; de lo contrario, creará un archivo nuevo.

Veamos la siguiente sintaxis.

Sintaxis:

 shutil.copyfile(source, destination, *, follow_symlinks = True) 

Parámetros:

En la sintaxis anterior -

  • El primer argumento es fuente, que muestra la ruta del archivo fuente.
  • El segundo argumento es destino, que muestra la ruta del archivo de destino.
  • El tercer argumento es opcional; el valor predeterminado de este parámetro es verdadero.
  • Devuelve una cadena que muestra la ruta del archivo recién creado.

Entendamos el siguiente ejemplo.

Ejemplo -

 import shutil # hello.txt file will be copied source = r'D:Python Projectjavatpointhello.txt' # In the newly created foloder destination = r'D:Python ProjectNewFilehi.txt' # Storing the new path of hello.txt file dest1 = shutil.copyfile(source, destination) # Print the new path print(dest1) 

Producción:

 D:Python ProjectNewFilehi.txt 

La función Shutil.copytree()

Este método se utiliza para replicar el directorio completo. Copia un árbol de directorios completo con raíz en el origen al directorio de destino. El directorio de destino no debe estar ya presente. Veamos la siguiente sintaxis.

Sintaxis:

 shutil.copytree(src, dst, symlinks = False, ignore = None, copy_function = copy2, igonre_dangling_symlinks = False) 

Parámetros:

En la sintaxis anterior:

    src-Muestra la ruta del directorio de origen.mano -Muestra la ruta del directorio de destino.enlaces simbólicos (opcional) -Toma los valores booleanos: Verdadero y Falso. Depende de qué metadatos de los enlaces originales o de los enlaces se copiarán en el nuevo árbol.ignorar (opcional) -De forma predeterminada es Ninguno, pero si se pasa ignorar, debe ser un invocable que reciba como argumentos. El directorio es visitado por copytree().función_copia (opcional) -Copy2 es el valor predeterminado de este parámetro. El Copiar() La función se puede utilizar como parámetro.ignore_dangling_symlinks (opcional) -Este parámetro se utiliza para generar la excepción si el archivo señalado por el enlace simbólico no existe.
  • Devuelve la cadena que representa la ruta del directorio recién creado.

Ejemplo -

 # importing shutil module import shutil # It is source path src = r'D:Python Projectjavatpoint' # It is destination path dest = r'D:Python ProjectNewFolder' # Copy the content of # source to destination dest1 = shutil.copytree(src, dest) # Now we print path of newly # created file print('Destination path:', dest1) 

Producción:

 Destination path: D:Python ProjectNewFolder 

El Shutil.rmtree()

Este método se utiliza para eliminar el árbol de directorios completo. Veamos la siguiente sintaxis.

Sintaxis:

 shutil.rmtree(path, ignore_errors=False, onerror=None) 

Parámetro-

En la sintaxis anterior -

    camino -Representa la ruta del archivo. Un objeto similar a una ruta es una cadena o un objeto de bytes.ignorar_errores -La eliminación se ignorará si este argumento es Verdadero.error -Si ignorar_errores es falso, dichos errores se manejan llamando a un controlador especificado por onerror.

Entendamos el siguiente ejemplo:

Ejemplo -

 import shutil import os # location location_dir = r'D:Python ProjectNewFile' # directory directory = r'D:Python Projectjavatpoint' # path path1 = os.path.join(location_dir, directory) # removing directory shutil.rmtree(path1) 

El código anterior eliminará el directorio proporcionado.

La función Shutil. Which()

El Shutil.cual() La función se utiliza para obtener la ruta de una aplicación ejecutable que se ejecutaría si se llamara al cmd dado. Encuentra el archivo en la ruta indicada. Veamos la siguiente sintaxis.

Sintaxis:

 shutil.which(cmd, mode = os.F_OK | os.X_OK, path = None) 

Parámetros

En la sintaxis anterior -

    cmd -Es una cadena que representa el archivo.modo -Especifica el modo de archivo en el que se debe ejecutar el método.camino -Este parámetro especifica la ruta que se utilizará.
  • Este método devuelve la ruta a una aplicación ejecutable.

Entendamos el siguiente ejemplo.

Ejemplo -

 # importing shutil module import shutil # search the file cmd = 'python' # Using shutil.which() method locating = shutil.which(cmd) # Print result print(locating) 

Producción:

 C:Pythonpython.EXE 

Encontrará el archivo proporcionado en la computadora; si se encuentra el archivo, devuelve la ruta del archivo; de lo contrario, devuelve Ninguno.