Módulo Shutil en Python

El módulo Shutil ofrece una operación de alto nivel en un archivo como una copia, creación y operación remota en el archivo. Viene bajo los módulos de utilidad estándar de Python. Este módulo ayuda a automatizar el proceso de copia y eliminación de archivos y directorios. En este artículo, aprenderemos este módulo.

Copiar archivos a otro directorio

El método shutil.copy() en Python se usa para copiar el contenido del archivo fuente al archivo o directorio de destino. También conserva el modo de permiso del archivo, pero no se conservan otros metadatos del archivo, como los tiempos de creación y modificación del archivo.
El origen debe representar un archivo, pero el destino puede ser un archivo o un directorio. Si el destino es un directorio, el archivo se copiará en el destino utilizando el nombre de archivo base del origen. Además, el destino debe ser escribible. Si el destino es un archivo y ya existe, se reemplazará con el archivo de origen; de lo contrario, se creará un nuevo archivo.

Sintaxis: shutil.copy(origen, destino, *, follow_symlinks = True)

Parámetro:

  • fuente: una string que representa la ruta del archivo fuente.
  • destino: una string que representa la ruta del archivo o directorio de destino.
  • follow_symlinks (opcional): el valor predeterminado de este parámetro es True. Si es Falso y el origen representa un enlace simbólico, el destino se creará como un enlace simbólico.

Tipo de devolución: este método devuelve una string que representa la ruta del archivo recién creado.

Ejemplo 1:

Python3

# Python program to explain shutil.copy() method
 
# importing shutil module
import shutil
 
source = "path/main.py"
destination ="path/main2.py"
 
# Copy the content of
# source to destination
dest = shutil.copy(source, destination)
 
# Print path of newly
# created file
print("Destination path:", dest)

Producción:

Destination path: path/main2.py

Ejemplo 2: Si el destino es un directorio.

Python3

# importing shutil module 
import shutil
   
# Source path
source = "path/main.py"
   
# Destination path
destination = "path/gfg/"
   
# Copy the content of
# source to destination
dest = shutil.copy(source, destination)
   
 
# Print path of newly 
# created file
print("Destination path:", dest)

Producción:

path/gfg/main.py

Copiar los metadatos junto con el archivo

El método shutil.copy2() en Python se usa para copiar el contenido del archivo fuente al archivo o directorio de destino. Este método es idéntico al método shutil.copy() pero también intenta conservar los metadatos del archivo.

Sintaxis: shutil.copy2(origen, destino, *, follow_symlinks = True)

Parámetro:

  • fuente : una string que representa la ruta del archivo fuente.
  • destino: una string que representa la ruta del archivo o directorio de destino.
  • follow_symlinks (opcional): el valor predeterminado de este parámetro es True. Si es Falso y el origen representa un enlace simbólico, entonces intenta copiar todos los metadatos del enlace simbólico de origen al enlace simbólico de destino recién creado. Esta funcionalidad depende de la plataforma.

Tipo de devolución: este método devuelve una string que representa la ruta del archivo recién creado.

Python3

# Python program to explain shutil.copy2() method
     
# importing os module
import os
 
# importing shutil module
import shutil
 
# path
path = 'csv/'
 
# List files and directories
# in '/home/User/Documents'
print("Before copying file:")
print(os.listdir(path))
 
 
# Source path
source = "csv/main.py"
 
# Print the metadeta
# of source file
metadata = os.stat(source)
print("Metadata:", metadata, "\n")
 
# Destination path
destination = "csv/gfg/check.txt"
 
# Copy the content of
# source to destination
dest = shutil.copy2(source, destination)
 
# List files and directories
# in "/home / User / Documents"
print("After copying file:")
print(os.listdir(path))
 
# Print the metadata
# of the destination file
matadata = os.stat(destination)
print("Metadata:", metadata)
 
# Print path of newly
# created file
print("Destination path:", dest)

Producción:

Antes de copiar el archivo:

[‘archivo (2)’, ‘c.jpg’, ‘c.PNG’, ‘Capturar.PNG’, ‘cc.jpg’, ‘check.zip’, ‘cv.csv’, ‘d.png’, ‘¡Hecho! Generador de términos y condiciones: ¡el generador de términos y condiciones gratuito más rápido! , ‘new_gfg.png’, ‘r.gif’, ‘Resultado -_ ¡Los términos y condiciones están listos!.pdf’, ‘rockyou.txt’, ‘sample.txt’]

Metadatos: os.stat_result(st_mode=33206, st_ino=2251799814202896, st_dev=1689971230, st_nlink=1, st_uid=0, st_gid=0, st_size=1916, st_atime=1612953710, st_mtime=1612,29132c) 

Después de copiar el archivo:

[‘archivo (2)’, ‘c.jpg’, ‘c.PNG’, ‘Capturar.PNG’, ‘cc.jpg’, ‘check.zip’, ‘cv.csv’, ‘d.png’, ‘¡Hecho! Generador de términos y condiciones: ¡el generador de términos y condiciones gratuito más rápido! , ‘new_gfg.png’, ‘r.gif’, ‘Resultado -_ ¡Los términos y condiciones están listos!.pdf’, ‘rockyou.txt’, ‘sample.txt’]

Metadatos: os.stat_result(st_mode=33206, st_ino=2251799814202896, st_dev=1689971230, st_nlink=1, st_uid=0, st_gid=0, st_size=1916, st_atime=1612953710, st_mtime=1612,29132c)

Ruta de destino: csv/gfg/check.txt

Ejemplo 2: Si el destino es un directorio

Python3

# Python program to explain shutil.copy2() method
# importing os module
import os
 
# importing shutil module
import shutil
 
# Source path
source = "csv/main.py"
 
# Destination path
destination = "csv/gfg/"
 
# Copy the content of
# source to destination
dest = shutil.copy2(source, destination)
 
# List files and directories
# in "/home / User / Desktop"
print("After copying file:")
print(os.listdir(destination))
 
# Print path of newly
# created file
print("Destination path:", dest)

Producción:

Después de copiar el archivo:

[‘cc.jpg’, ‘check.txt’, ‘log_transformed.jpg’, ‘main.py’, ‘main2.py’]

Ruta de destino: csv/gfg/main.py

Copiar el contenido de un archivo a otro

El método shutil.copyfile() en Python se usa para copiar el contenido del archivo de origen al archivo de destino. Los metadatos del archivo no se copian. El origen y el destino deben representar un archivo y el destino debe ser escribible. Si el destino ya existe, se reemplazará con el archivo de origen; de lo contrario, se creará un nuevo archivo.

Si el origen y el destino representan el mismo archivo, se generará la excepción SameFileError.

Sintaxis: shutil.copyfile(origen, destino, *, follow_symlinks = True)

Parámetro:

  • fuente: una string que representa la ruta del archivo fuente.
  • destino: una string que representa la ruta del archivo de destino.
  • follow_symlinks (opcional): el valor predeterminado de este parámetro es True. Si False y la fuente representa un enlace simbólico, se creará un nuevo enlace simbólico en lugar de copiar el archivo.

Tipo de devolución: este método devuelve una string que representa la ruta del archivo recién creado.

Python3

# Python program to explain shutil.copyfile() method
# importing shutil module
import shutil
 
# Source path
source = "csv/main.py"
 
# Destination path
destination = "csv/gfg/main_2.py"
 
dest = shutil.copyfile(source, destination)
 
print("Destination path:", dest)

Producción:

Destination path: csv/gfg/main_2.py

Replicando Directorio completo

El método shutil.copytree() copia recursivamente un árbol de directorios completo enraizado en el origen (src) al directorio de destino. El directorio de destino, denominado por (dst), no debe existir todavía. Se creará durante la copia.

Sintaxis: shutil.copytree(src, dst, symlinks = False, ignore = None, copy_function = copy2, ignore_dangling_symlinks = False)

Parámetros:
src: una string que representa la ruta del directorio de origen.
dest: una string que representa la ruta del destino.
symlinks (opcional) : Este parámetro acepta Verdadero o Falso, dependiendo de cuál se copiarán los metadatos de los enlaces originales o enlaces enlazados al nuevo árbol.
ignore (opcional): si se da ignore, debe ser un invocable que recibirá como argumentos el directorio que está visitando copytree() y una lista de su contenido, tal como lo devuelve os.listdir().
copy_function (opcional): el valor predeterminado de este parámetro es copy2. Podemos usar otra función de copia como copy() para este parámetro.
ignore_dangling_symlinks (opcional) :Este valor de parámetro, cuando se establece en True, se usa para silenciar la excepción generada si el archivo al que apunta el enlace simbólico no existe.

Valor devuelto: este método devuelve una string que representa la ruta del directorio recién creado.

Python3

# Python program to explain shutil.copytree() method
# importing os module
import os
 
# importing shutil module
import shutil
 
# path
path = 'C:/Users/ksaty/csv/gfg'
 
print("Before copying file:")
print(os.listdir(path))
 
# Source path
src = 'C:/Users/ksaty/csv/gfg'
 
# Destination path
dest = 'C:/Users/ksaty/csv/gfg/dest'
 
# Copy the content of
# source to destination
destination = shutil.copytree(src, dest)
 
print("After copying file:")
print(os.listdir(path))
 
# Print path of newly
# created file
print("Destination path:", destination)

Producción:

Antes de copiar el archivo:

[‘cc.jpg’, ‘check.txt’, ‘log_transformed.jpg’, ‘main.py’, ‘main2.py’, ‘main_2.py’]

Después de copiar el archivo:

[‘cc.jpg’, ‘check.txt’, ‘destino’, ‘log_transformed.jpg’, ‘main.py’, ‘main2.py’, ‘main_2.py’]

Ruta de destino: C:/Users/ksaty/csv/gfg/dest

Eliminación de un directorio

shutil.rmtree() se usa para eliminar un árbol de directorios completo, la ruta debe apuntar a un directorio (pero no un enlace simbólico a un directorio).

Sintaxis: shutil.rmtree(ruta, ignore_errors=False, onerror=Ninguno)

Parámetros:
ruta: un objeto similar a una ruta que representa una ruta de archivo. Un objeto similar a una ruta es una string o un objeto de bytes que representa una ruta.
ignore_errors: si ignore_errors es verdadero, se ignorarán los errores resultantes de eliminaciones fallidas.
oneerror: si ignore_errors es falso o se omite, dichos errores se manejan llamando a un controlador especificado por onerror.

Python3

# Python program to demonstrate
# shutil.rmtree()
 
import shutil
import os
 
# location
location = "csv/gfg/"
 
# directory
dir = "dest"
 
# path
path = os.path.join(location, dir)
 
# removing directory
shutil.rmtree(path)

Encontrar archivos

El método shutil. Which() indica la ruta a una aplicación ejecutable que se ejecutaría si se invocara el cmd dado . Este método se puede usar para encontrar un archivo en una computadora que está presente en la RUTA.

Sintaxis: shutil.which(cmd, modo = os.F_OK | os.X_OK, ruta = Ninguno)
Parámetros:
cmd: Una string que representa el archivo.
modo: este parámetro especifica el modo por el cual se debe ejecutar el método. os.F_OK comprueba la existencia de la ruta y os.X_OK comprueba si la ruta se puede ejecutar o podemos decir que el modo determina si el archivo existe y es ejecutable.
ruta: este parámetro especifica la ruta que se utilizará; si no se especifica ninguna ruta, se utilizan los resultados de os.environ()
Valor de retorno: este método devuelve la ruta a una aplicación ejecutable

Python3

# importing shutil module 
import shutil 
   
# file search 
cmd = 'anaconda'
   
# Using shutil.which() method
locate = shutil.which(cmd)
   
# Print result
print(locate)

Producción:

D:\Installation_bulk\Scripts\anaconda.EXE

Publicación traducida automáticamente

Artículo escrito por kumar_satyam y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *