El módulo Shutil en Python proporciona muchas funciones de operaciones de alto nivel en archivos y colecciones de archivos. 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.
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, nombrado por (dst) no debe existir todavía . Se creará durante la copia. Los permisos y tiempos de los directorios se copian con copystat() y los archivos individuales se copian usando shutil.copy2() .
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 fuente.
dest: una string que representa la ruta del destino.
Enlaces simbólicos (opcional): Este parámetro acepta Verdadero o Falso, según el cual se copiarán los metadatos de los enlaces originales o enlaces enlazados en el nuevo árbol.
ignorar (opcional): si se proporciona ignorar, 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): el valor de este parámetro, cuando se establece en True, se usa para silenciar la excepción generada si el archivo señalado por el enlace simbólico no existe.
Valor devuelto: este método devuelve una string que representa la ruta del directorio recién creado.
Ejemplo: Supongamos que el directorio se ve así.
Queremos copiar la carpeta ‘src’ a una nueva carpeta ‘dst’. A continuación se muestra la implementación.
Python3
# Python program to explain shutil.copytree() method # importing shutil module import shutil # path path = 'D:/Pycharm projects/GeeksforGeeks/' # Source path src = 'D:/Pycharm projects/GeeksforGeeks/src' # Destination path dest = 'D:/Pycharm projects/GeeksforGeeks/dst' # Copy the content of # source to destination destination = shutil.copytree(src, dest) # print(destination) prints the # path of newly created file
Producción:
Copie archivos y directorios
Modificar un poco el código anterior nos permite copiar tanto archivos como directorios. Esto se puede hacer usando la función copytree() y un bloque try-except. Capturaremos la excepción y, si la excepción es ENOTDIR, usaremos la función copy2() para copiar los archivos. Hacer esto nos permite copiar tanto archivos como directorios usando un solo código.
Supongamos que el directorio de destino se ve así.
Queremos copiar un archivo de texto presente en la carpeta src a esta carpeta de destino. A continuación se muestra la implementación.
Python3
# Python program to demonstrate # shutil.copytree() # Importing module import shutil import errno # Source path src = 'D:/Pycharm projects/GeeksforGeeks/src/b/test_b.txt' # Destination path dest = 'D:/Pycharm projects/GeeksforGeeks/dst' # Copy the content of # source to destination try: shutil.copytree(src, dest) except OSError as err: # error caused if the source was not a directory if err.errno == errno.ENOTDIR: shutil.copy2(src, dest) else: print("Error: % s" % err)
Producción:
Ignorar archivos y directorios
A veces, al copiar un directorio a otro directorio, es posible que no desee copiar algunos archivos o subdirectorios. Incluso esto es manejado por el módulo shutil. La función copytree() toma el argumento ignore que permite especificar una función que devuelve una lista de directorios o archivos que deben ser ignorados. Esta función toma el nombre del archivo o directorio como un argumento que actúa como un filtro de nombres. Si el argumento pasado está en los nombres, entonces se agrega a una lista que especifica el copytree() qué archivo o directorio omitir.
Ejemplo: supongamos que la carpeta de origen se ve así.
Queremos copiar el contenido de la carpeta anterior con la carpeta ‘a’. A continuación se muestra la implementación.
Python3
# Python program to demonstrate # shutil.copytree() # importing modules import shutil # Declaring the ignore function def ignoreFunc(file): def _ignore_(path, names): # List containing names of file # that are needed to ignore ignored = [] # check if file in names # then add it to list if file in names: ignored.append(file) return set(ignored) return _ignore_ # Source path src = 'D:/Pycharm projects /GeeksforGeeks/src' # Destination path dest = 'D:/Pycharm projects/GeeksforGeeks/dst' # Copying the contents from Source # to Destination without some # specified files or directories shutil.copytree(src, dest, ignore = ignoreFunc('a'))
Producción:
Para eliminar más de un archivo o un archivo con un formato particular, se usa shutil.ignore_patterns. Esta función se pasa como argumento al método copytree() que especifica los patrones globales para filtrar los archivos y directorios.
Ejemplo: Usaremos la carpeta de origen anterior como ejemplo y no copiaremos ningún archivo .txt ni la carpeta ‘a’. A continuación se muestra la implementación.
Python3
# Python program to demonstrate # shutil.copytree() # importing modules import shutil # Source path src = 'D:/Pycharm projects/GeeksforGeeks/src' # Destination path dest = 'D:/Pycharm projects/GeeksforGeeks/dst' # Copying the contents from Source # to Destination without some # specified files or directories shutil.copytree(src, dest, ignore = shutil.ignore_patterns('*.txt', 'a'))
Producción:
Publicación traducida automáticamente
Artículo escrito por nikhilaggarwal3 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA