Cómo crear diccionarios de conjuntos que consisten en carpetas y archivos en os.directory

2020-06-30 python python-3.x dictionary set

Quiero generar un diccionario de conjuntos como el siguiente ejemplo

{ "1" : ["IMG_0001", "IMG_0002","IMG_0003", "IMG_0004"] }
{ "2" : ["IMG_0020", "IMG_0021","IMG_0022", "IMG_0023"] }
{ "3" : ["IMG_0051", "IMG_0052","IMG_0053", "IMG_0054"] }

donde 1,2,3 son los nombres de las carpetas y IMG_001, .. son los nombres de las imágenes dentro de cada carpeta

He intentado un bucle for con os.walk ('nombre de ruta interior') y

import os, os.path
h={}


for subdir, dirs, files in os.walk(r'Path_data_folders'):
#    print("subdir ",subdir)
#    print("dirs ",dirs)
#    print("file ",files)

    # simple version for working with CWD
    
    for file in files:
        for i in range(0,3):
            s=set()

            s.add(file)
  
            h[i]=s
            print(h[i]) 

¿Alguien puede ayudarme? ¿Cómo debo crear un diccionario de nombres de carpetas y crear un conjunto de solo aquellos archivos IMG que están presentes en cada carpeta? Aprecio tu ayuda. Soy nuevo en python. Muchas gracias.

Answers

Utilizar:

import os
h={}
for subdir, dirs, files in os.walk(r"Path_data_folders"):    
    for file in files:
        key, value = os.path.basename(subdir), file  #Get basefolder name & file name
        h.setdefault(key, []).append(value)          #Form DICT
print(h)

Nota: Si necesita la ruta completa al nombre de la carpeta, use subdir , esto podría ser necesario porque podría tener una subcarpeta duplicada

Si no tiene carpetas anidadas con imágenes en ellas, esto funcionará. De lo contrario, la clave tendrá la ruta relativa de las carpetas anidadas.

result = {subdir: files for subdir, dirs, files in os.walk("/path/to/your/directory")}

Related