gpt4 book ai didi

Python - 如何在字典中递归添加文件夹的内容

转载 作者:行者123 更新时间:2023-11-28 19:40:59 25 4
gpt4 key购买 nike

我正在构建一个 python 脚本,它将作为 python 练习从我的库中删除重复项。这个想法是为库中文件夹中的每个文件构建一个包含字典(包含文件/文件夹上的数据和统计信息)的字典。它目前适用于一定数量的子文件夹。这是它给出的示例。

>>> 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)

关于Python - 如何在字典中递归添加文件夹的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3680464/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com