无法在Python 3

时间:2015-11-16 04:55:20

标签: python python-3.x

我尝试了print(list(....))这应该有效,但在这种情况下,它没有。

我正在创建dictionary directory个名称keyslistfile个名称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作为输出,但我不能printloop通过values generator expressions。我再次尝试listloop,但它无效。

{'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>]}

3 个答案:

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