簡體   English   中英

Python - 如何以遞歸方式在dict中添加文件夾的內容

[英]Python - How to recursively add a folder's content in a dict

我正在構建一個python腳本,它將從我的庫中刪除重復項作為python中的練習。 我們的想法是為庫中文件夾中的每個文件構建一個包含dict(包含文件/文件夾上的數據和統計信息)的dict。 它目前適用於一定數量的子文件夾。 這是它給出的一個例子。

>>> Files
{'/root/dupclean/working/test': {'FilenameEncoding': {'confidence': 1.0, 'encoding': 'ascii'}, 'File': False, 'T\xc3\xa9l\xc3\xa9phone': {'FilenameEncoding': {'confidence': 0.75249999999999995, 'encoding': 'utf-8'}, 'File': False, 'Extension': 'Folder', 'LastModified': 1284064857, 'FullPath': '/root/dupclean/working/test/T\xc3\xa9l\xc3\xa9phone', 'CreationTime': 1284064857, 'LastAccessed': 1284064857, 'Best Of': {'FilenameEncoding': {'confidence': 0.75249999999999995, 'encoding': 'utf-8'}, 'File': False, 'Extension': 'Folder', 'LastModified': 1284064965, 'FullPath': '/root/dupclean/working/test/T\xc3\xa9l\xc3\xa9phone/Best Of', '10 New York Avec Toi.mp3': {'FilenameEncoding': {'confidence': 0.75249999999999995, 'encoding': 'utf-8'}, 'File': True, 'Extension': 'mp3', 'LastModified': 1284064858, 'FullPath': '/root/dupclean/working/test/T\xc3\xa9l\xc3\xa9phone/Best Of/10 New York Avec Toi.mp3', 'CreationTime': 1284064858, 'LastAccessed': 1284064858, 'Size': 2314368L}, 'CreationTime': 1284064965, 'LastAccessed': 1284064857}}}}

這就是我現在制作它的方式:

ROOT = Settings['path']
Files = {ROOT: {'File': False, 'FilenameEncoding': chardet.detect(ROOT)},}
for fileName in os.listdir ( ROOT ):
fileStats = ROOT + '/' + fileName
    if os.path.isdir ( fileStats ):
        Files[ROOT][fileName] = Analyse(fileStats)
        for fileName2 in os.listdir ( ROOT + '/' + fileName): 
            dbg(70, "Scanning " + ROOT + '/' + fileName + '/' + fileName2)
            fileStats2 = ROOT + '/' + fileName + '/' + fileName2
            #third level
            if os.path.isdir ( fileStats2 ):
                Files[ROOT][fileName][fileName2] = Analyse(fileStats2)
                for fileName3 in os.listdir ( ROOT + '/' + fileName + '/' + fileName2): 
                    dbg(70, "Scanning " + ROOT + '/' + fileName + '/' + fileName2 + '/' + fileName3)
                    fileStats3 = ROOT + '/' + fileName + '/' + fileName2 + '/' + fileName3
                    #Fourth level
                    if os.path.isdir ( fileStats3 ):
                        Files[ROOT][fileName][fileName2][fileName3] = Analyse(fileStats3)
                        for fileName4 in os.listdir ( ROOT + '/' + fileName + '/' + fileName2 + '/' + fileName3): 
                            dbg(70, "Scanning " + ROOT + '/' + fileName + '/' + fileName2 + '/' + fileName3 + '/' + fileName4)
                            fileStats4 = ROOT + '/' + fileName + '/' + fileName2 + '/' + fileName3 + '/' + fileName4
                            #Fifth level
                            if os.path.isdir ( fileStats4 ):
                                Files[ROOT][fileName][fileName2][fileName3][fileName4] = Analyse(fileStats4)
                                for fileName5 in os.listdir ( ROOT + '/' + fileName + '/' + fileName2 + '/' + fileName3 + '/' + fileName4): 
                                    dbg(70, "Scanning " + ROOT + '/' + fileName + '/' + fileName2 + '/' + fileName3 + '/' + fileName4 + '/' + fileName5)
                                    fileStats5 = ROOT + '/' + fileName + '/' + fileName2 + '/' + fileName3 + '/' + fileName4 + '/' + fileName5
                                    #Sicth level
                                    if os.path.isdir ( fileStats5 ):
                                        Files[ROOT][fileName][fileName2][fileName3][fileName4][fileName5] = Analyse(fileStats5)
                                        dbg(10, "There was still a folder left in "+ROOT + '/' + fileName + '/' + fileName2 + '/' + fileName3 + '/' + fileName4)
                                    else:
                                        Files[ROOT][fileName][fileName2][fileName3][fileName4][fileName5] = Analyse(fileStats5)
                            else:
                                Files[ROOT][fileName][fileName2][fileName3][fileName4] = Analyse(fileStats4)
                    else:
                        Files[ROOT][fileName][fileName2][fileName3] = Analyse(fileStats3)
            else:
                Files[ROOT][fileName][fileName2] = Analyse(fileStats2)
    else:
        Files[ROOT][fileName] = Analyse(fileStats)

這顯然是錯誤的,但對於我的生活,我只是想辦法遞歸地做到這一點!
任何幫助或指針都會受到很大的影響。

使用os.walk

import os
for dirpath,dirs,files in os.walk(ROOT):
    for f in dirs + files:
        fn = os.path.join(dirpath, f)
        FILES[fn] = Analyse(fn)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM