我尝试了print(list(....))
这应该有效,但在这种情况下,它没有。
我正在创建dictionary
directory
个名称keys
和list
个file
个名称directory
values
。我正在使用os.walk
。
import os
d = {}
for x,y,z in os.walk(path_folders):
for f in y:
if f not in d:
d[f] = []
d[f].append(i for i in z)
print (d)
我将dictionary
作为输出,但我不能print
或loop
通过values
generator expressions
。我再次尝试list
和loop
,但它无效。
{'folder4': [<generator object <genexpr> at 0x0000000004B8B798>], 'folder5': [<generator object <genexpr> at 0x0000000004B8BCF0>], 'subfolder6': [<generator object <genexpr> at 0x0000000004B95E10>], 'subfolder4': [<generator object <genexpr> at 0x0000000004B8B990>], 'subfolder5': [<generator object <genexpr> at 0x0000000004B95360>], 'forder2': [<generator object <genexpr> at 0x0000000004B8BC18>], 'folder6': [<generator object <genexpr> at 0x0000000004B8B510>], 'folder3': [<generator object <genexpr> at 0x0000000004B853A8>], 'folder1': [<generator object <genexpr> at 0x0000000004921CF0>]}
答案 0 :(得分:1)
使用extend
代替append
。问题是你没有通过生成器迭代来获得结果,而只是将结果的承诺放在字典中。
这段代码对我有用。
import os
path_folders = "/path/to/stuff"
d = {}
for x,y,z in os.walk(path_folders):
for f in y:
if f not in d:
d[f] = []
d[f].extend(i for i in z)
print (d)
修改强>
好的我早就错过了一些东西...... dirnames是该目录中所有目录的列表,而filenames只是该目录中的所有文件,而不是子目录。我知道有些事情没有了。所以我将范围限制在一个文件夹中,我可以很容易地看到那里有哪些文件并进行了一些测试。我们让它变得比以前更加复杂。
import os
path_folders = "/path/to/stuff/limited"
d = {}
for dirpath, dirnames, filenames in os.walk(path_folders):
d[dirpath] = filenames
print(d)
dirpath
是完整的路径。
dirnames
是该路径中的所有目录。
filenames
是该路径中的所有文件。
如果您想要所有这些路径所在的当前文件夹名称,则需要修剪dirpath
以获取它。 dirpath.split('/')[-1]
应该为你做到这一点。
通过上述修剪和代码,我得到了这些结果。
{'directory1': ['file1', 'file2'], 'directory2': ['file3', 'file4']}
答案 1 :(得分:0)
使用d[f] = z
代替d[f].append(i for i in z)
import os
d = {}
for x, y, z in os.walk(path_folders):
for f in y:
d[f] = z
print (d)
或
import os
d = {}
for x, y, z in os.walk(path_folders):
for f in y:
if f not in d:
d[f] = []
d[f] += z
print (d)
答案 2 :(得分:0)
试试这个
import os
d = {}
for x,y,z in os.walk(path_folders):
for f in y:
if f not in d:
d[f] = []
d[f].extend([i for i in z])
print (d)