我正在搜索一种算法来完成一项工作。基本上我从用户那里得到一个输入,源目录。我想创建两个不同的词典,一个保存文件夹的子文件夹,另一个保存文件夹的文件。例如:
我有一个文件夹"文件夹",里面包括一个名为:log.txt的文本文件和3个子文件夹,文件夹1,文件夹2和文件夹3。在文件夹2中,有一个名为txt1的文本文件.txt另一个名为子文件夹的文件夹,在这个子文件夹中有一张名为:pic的图片.png
folder->log.txt, folder1, folder2->(txt.txt, subfolder->pic.png), folder3
我想要的是字典看起来像这样:
folders = {'folder1':'', 'folder2': 'subfolder', folder3}
files = {'log.txt':'', 'txt.txt': 'folder2', 'pic.png':'folder2/subfolder'}
通常,我需要的是文件夹和子文件夹的清晰字典,以便于创建正确的文件夹和子文件夹。然后文件的字典要清楚文件拥有的位置。如果您有其他文件的字典结构,没关系,如果您认为更简单快捷。提前谢谢你。
编辑:我正在运行Mac OS X,带有python 3
编辑 2:
dirs = [d for d in os.listdir(source) if os.path.isdir(os.path.join(source, d))]
for folder in dirs:
tmp_source = source + folder
dirs2 = [d for d in os.listdir(tmp_source) if os.path.isdir(os.path.join(tmp_source, d))]
if dirs2 != []:
print('Folder: ', dirs2, 'is not empty')
dic[folder] = dirs2
下面的代码将递归地遍历根文件夹,并将每个文件夹(包括根文件夹)的文件名保存在字典中,并将键作为文件夹路径。
import os
root_folder = r'C:UsersSteinarGoogle DriveKodeYmsetesttest'
content = {}
for root, dirs, files in os.walk(root_folder):
for subdir in dirs:
content[os.path.join(root, subdir)] = []
content[root] = files
# Print out the content dict
for folder, filenames in content.items():
print 'Folder: {}'.format(folder)
print 'Filenames:'
for filename in filenames:
print '-> {}'.format(filename)
使用上述输入,此脚本输出正确的文件夹结构。
Folder: C:UsersSteinarGoogle DriveKodeYmsetesttesttest2
Filenames:
-> test2.txt
Folder: C:UsersSteinarGoogle DriveKodeYmsetesttest
Filenames:
-> test.txt
Folder: C:UsersSteinarGoogle DriveKodeYmsetesttesttest2test3test4
Filenames:
Folder: C:UsersSteinarGoogle DriveKodeYmsetesttesttest2test3
Filenames:
-> test3.txt
如果要重建文件夹结构,只需遍历content.keys()
,然后创建每个文件夹。