-2

我正在寻找一种算法来完成一项工作。基本上我从用户那里得到一个输入,即源目录。我想创建两个不同的字典,一个包含文件夹的子文件夹,一个包含文件夹的文件。例如:

我有一个文件夹“文件夹”,其中包含一个名为:log.txt 和 3 个子文件夹、文件夹 1、文件夹 2 和文件夹 3 的文本文件。在文件夹 2 内有另一个名为 txt1.txt 的文本文件和另一个名为 subfolder 的文件夹,在这个子文件夹中有一个名为: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'}

一般来说,我需要一个清晰的文件夹和子文件夹字典,以便在正确创建文件夹和子文件夹后轻松。然后文件的字典要清楚文件在哪里。如果您有其他结构的文件字典没关系,如果您认为更容易和快速。先感谢您。

编辑:我正在使用 python 3 运行 Mac OS X

编辑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
4

1 回答 1

2

下面的代码将递归遍历根文件夹,并将每个文件夹(包括根文件夹)的文件名保存在字典中,其中键为文件夹路径。

import os

root_folder = r'C:\Users\Steinar\Google Drive\Kode\Ymse\test\test'
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:\Users\Steinar\Google Drive\Kode\Ymse\test\test\test2
Filenames:
-> test2.txt
Folder: C:\Users\Steinar\Google Drive\Kode\Ymse\test\test
Filenames:
-> test.txt
Folder: C:\Users\Steinar\Google Drive\Kode\Ymse\test\test\test2\test3\test4
Filenames:
Folder: C:\Users\Steinar\Google Drive\Kode\Ymse\test\test\test2\test3
Filenames:
-> test3.txt

如果你想重建文件夹结构,你可以迭代content.keys(),然后创建每个文件夹。

于 2013-11-09T14:19:10.163 回答