En este artículo, discutiremos cómo copiar la estructura de directorios con archivos usando Python. Por ejemplo, considere este árbol de directorios:
Tenemos una carpeta llamada «base» y dentro tenemos una carpeta llamada «Estructura». “Estructura” tiene algunas carpetas dentro que también contienen algunos archivos. Ahora tenemos que copiar todas las carpetas de «Estructura» a una carpeta llamada «estructura_copiada» para que los archivos no se copien.
En este artículo, discutiremos varias formas de hacerlo.
- Usando shutil.copytree()
- Usando os.walk()
Método 1: Usar shutil.copytree()
Usando el método shutil.copytree() de la biblioteca shutil podemos lograr esta tarea. 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. Toma un argumento opcional que es «ignorar». Si se da «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() . Para una mejor comprensión, implementemos este método escribiendo código.
El código para copiar solo la estructura de directorios de «Estructura» sin archivo a «estructura_copiada» será:
Python
# importing the shutil module import shutil # importing the os module import os # defining the function to ignore the files # if present in any folder def ignore_files(dir, files): return [f for f in files if os.path.isfile(os.path.join(dir, f))] # calling the shutil.copytree() method and # passing the src,dst,and ignore parameter shutil.copytree('D:/projects/base/Structure', 'D:/projects/base/copied_structure', ignore=ignore_files)
Después de ejecutar el código anterior, encontraremos que se crea una nueva carpeta llamada «estructura_copiada» que contiene la misma estructura de carpetas que la carpeta «Estructura» pero no tiene ningún archivo presente en la carpeta «Estructura».
Método 2: Usar os.walk()
También podemos lograr la tarea anterior usando el método os.walk() del módulo os . Haremos esto caminando a cada directorio del directorio de origen y obteniendo los nombres de las carpetas y su ruta relativa del directorio de origen y luego por esta ruta relativa, haremos una copia de ellos en el directorio de destino usando os.mkdir() . El código para esta implementación es:
Python
# importing the os module import os # defining a function for the task def create_dirtree_without_files(src, dst): # getting the absolute path of the source # directory src = os.path.abspath(src) # making a variable having the index till which # src string has directory and a path separator src_prefix = len(src) + len(os.path.sep) # making the destination directory os.makedirs(dst) # doing os walk in source directory for root, dirs, files in os.walk(src): for dirname in dirs: # here dst has destination directory, # root[src_prefix:] gives us relative # path from source directory # and dirname has folder names dirpath = os.path.join(dst, root[src_prefix:], dirname) # making the path which we made by # joining all of the above three os.mkdir(dirpath) # calling the above function create_dirtree_without_files('D:/projects/base/Structure', 'D:/projects/base/copied_structure')
Después de ejecutar este código, encontraremos que se crea una carpeta llamada «estructura_copiada» que tiene la misma estructura de directorio que «Estructura» pero no tiene ningún archivo.
Publicación traducida automáticamente
Artículo escrito por yashgupta0524 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA