代码之家  ›  专栏  ›  技术社区  ›  user6456568

python将所有子文件夹递归地获取到dict[duplicate]

  •  0
  • user6456568  · 技术社区  · 6 年前

    {
       'delo' : {
          'navodila.docx' : 83273,
          'poročilo.pdf' : 37653347,
          'artikli.dat' : 253
       },
       'igre' : {},
       'seznam.txt' : 7632,
       'razno' : {
          'slika.jpg' : 4275,
          'prijatelji' : {
             'janez.jpg' : 8734765,
             'mojca.png' : 8736,
             'veronika.jpg' : 8376535,
             'miha.gif' : 73645
          },
          'avto.xlsx' : 76357
       }
       'ocene.xlsx' : 8304
    }
    

    到现在为止我一直在做这个:

    import os
    
    def izpis(map):
        slovar={}
        listFiles = os.listdir(map)
        for ts in listFiles:
            fullName = map +'\\' + ts
    
            if os.path.isfile(fullName):
                size=os.path.getsize(fullName)
                slovar[ts]=size
            else:
                slovar+=izpis(fullName)
    
    
    
    
    
        return (slovar)
    
    0 回复  |  直到 11 年前
        1
  •  3
  •   falsetru    11 年前
    def f(path):
        if os.path.isdir(path):
            d = {}
            for name in os.listdir(path):
                d[name] = f(os.path.join(path, name))
        else:
            d = os.path.getsize(path)
        return d
    
        2
  •  0
  •   falsetru    11 年前
    def dumps(d, level=0, indent=4):
        if isinstance(d, dict):
            if not d: return '{}'
            return '{\n' + ',\n'.join(
                (' ' * (level+indent) + "'{}' : {}".format(name, dumps(d[name], level+indent, indent)) for name in d),
            ) + '\n' + ' ' * level + '}'
        else:
            return str(d)
    
    print dumps({
       'delo' : {
          'navodila.docx' : 83273,
          'porocilo.pdf' : 37653347,
          'artikli.dat' : 253
       },
       'igre' : {},
       'seznam.txt' : 7632,
       'razno' : {
          'slika.jpg' : 4275,
          'prijatelji' : {
             'janez.jpg' : 8734765,
             'mojca.png' : 8736,
             'veronika.jpg' : 8376535,
             'miha.gif' : 73645
          },
          'avto.xlsx' : 76357
       },
       'ocene.xlsx' : 8304
    })
    
        3
  •  0
  •   Mohamed Benkedadra    6 年前
    import os
    
    def get_listings(directory):
        parent, folder = os.path.split(directory)
        listings = {
            'folder': folder,
            'children-files': [],
            'children-folders': [],
        }
    
        children = os.listdir(directory)
        for child in children:
            child_path = os.path.join(directory, child)
            if os.path.isdir(child_path):
                listings['children-folders'] += [get_listings( child_path )]
            else:
                listings['children-files'] += [child]
    
    
        return listings
    
    
    
    
    directory = '/home/user/hello'   
    print(get_listings(directory))
    

    输出为:

    {
        'folder': 'hello',
        'children-files': ['a2', '1'],
        'children-folders': [{
            'folder': '002',
            'children-files': [],
            'children-folders': []
        }, {
            'folder': '001',
            'children-files': ['1'],
            'children-folders': [{
                'folder': 'aaaa',
                'children-files': ['321'],
                'children-folders': []
            }]
        }]
    }
    
    推荐文章