¿Cómo fusionar varias carpetas en una carpeta usando Python?

En este artículo, discutiremos cómo mover varias carpetas a una carpeta. Esto se puede hacer usando el sistema operativo de Python y el módulo Shutil .

Acercarse:

  1. Obtenga el directorio actual y la lista de las carpetas que desea fusionar.
  2. Recorra la lista de carpetas y almacene su contenido en una lista. Aquí los hemos guardado en el diccionario para que podamos tener el nombre de la carpeta como clave y su contenido como lista de valores.
  3. Especifique la carpeta en la que desea fusionar todas las demás carpetas. Si la carpeta existe, estamos listos para continuar, pero si la carpeta no existe, cree una nueva carpeta.
  4. Recorra el diccionario y mueva todo el contenido de todas las carpetas enumeradas dentro de la carpeta de combinación.

Implementemos este enfoque paso a paso:

Paso 1: El siguiente código hace lo siguiente:

  • Obtener el directorio actual.
  • Enumere todas las carpetas que desea fusionar.
  • Almacena el contenido de todas las carpetas enumeradas en el diccionario con el nombre de la carpeta como clave y su contenido como una lista de valores.

Python3

# current folder path
current_folder = os.getcwd() 
  
# list of folders to be merged
list_dir = ['Folder 1', 'Folder 2', 'Folder 3']
  
# enumerate on list_dir to get the 
# content of all the folders ans store it in a dictionary
content_list = {}
for index, val in enumerate(list_dir):
    path = os.path.join(current_folder, val)
    content_list[ list_dir[index] ] = os.listdir(path)

Paso 2: crea la carpeta de combinación si aún no existe.

Python3

# Function to create new folder if not exists
def make_new_folder(folder_name, parent_folder_path):
      
    # Path
    path = os.path.join(parent_folder_path, folder_name)
      
    # Create the folder
    # 'new_folder' in
    # parent_folder
    try: 
        
        # mode of the folder
        mode = 0o777
  
        # Create folder
        os.mkdir(path, mode) 
          
    except OSError as error: 
        print(error)
  
# folder in which all the content 
# will be merged
merge_folder = "merge_folder"
  
# merge_folder path - current_folder 
# + merge_folder
merge_folder_path = os.path.join(current_folder, merge_folder) 
  
# create merge_folder if not exists
make_new_folder(merge_folder, current_folder)

Paso 3: El siguiente código hace lo siguiente:

  • Recorra el diccionario con todas las carpetas.
  • Ahora recorra el contenido de cada carpeta y muévalos uno por uno a la carpeta de combinación.

Python3

# loop through the list of folders
for sub_dir in content_list:
  
    # loop through the contents of the
    # list of folders
    for contents in content_list[sub_dir]:
  
        # make the path of the content to move 
        path_to_content = sub_dir + "/" + contents  
  
        # make the path with the current folder
        dir_to_move = os.path.join(current_folder, path_to_content )
  
        # move the file
        shutil.move(dir_to_move, merge_folder_path)

Código completo:

Python3

import shutil
import os
  
  
# Function to create new folder if not exists
def make_new_folder(folder_name, parent_folder):
      
    # Path
    path = os.path.join(parent_folder, folder_name)
      
    # Create the folder
    # 'new_folder' in
    # parent_folder
    try: 
        # mode of the folder
        mode = 0o777
  
        # Create folder
        os.mkdir(path, mode) 
    except OSError as error: 
        print(error)
  
# current folder path
current_folder = os.getcwd() 
  
# list of folders to be merged
list_dir = ['Folder 1', 'Folder 2', 'Folder 3']
  
# enumerate on list_dir to get the 
# content of all the folders ans store 
# it in a dictionary
content_list = {}
for index, val in enumerate(list_dir):
    path = os.path.join(current_folder, val)
    content_list[ list_dir[index] ] = os.listdir(path)
  
# folder in which all the content will
# be merged
merge_folder = "merge_folder"
  
# merge_folder path - current_folder 
# + merge_folder
merge_folder_path = os.path.join(current_folder, merge_folder) 
  
# create merge_folder if not exists
make_new_folder(merge_folder, current_folder)
  
# loop through the list of folders
for sub_dir in content_list:
  
    # loop through the contents of the 
    # list of folders
    for contents in content_list[sub_dir]:
  
        # make the path of the content to move 
        path_to_content = sub_dir + "/" + contents  
  
        # make the path with the current folder
        dir_to_move = os.path.join(current_folder, path_to_content )
  
        # move the file
        shutil.move(dir_to_move, merge_folder_path)

Estructura de carpetas antes de ejecutar el programa anterior.

Folder 1
    File 1
    File 2
Folder 2
    File 3
    File 4
Folder 3
    File 5
    File 6
Folder 4
    File 7
    File 8
merge_folder (Empty)
move_script.py

Estructura de carpetas después de ejecutar el programa anterior.

Folder 1 (Empty)
Folder 2 (Empty)
Folder 3 (Empty)
Folder 4 (Untouched)
    File 7
    File 8
merge_folder
    File 1
    File 2
    File 3
    File 4
    File 5
    File 6
move_script.py

Programa en funcionamiento:

Publicación traducida automáticamente

Artículo escrito por adityapande88 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 *