我已经尝试过 print(list(....))
应该可以,但在这种情况下,它不会。
我正在创建一个字典
,directory
names 作为keys
,list
和file
将每个 目录
中的名称作为值
。我正在使用 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
作为输出,但我无法通过 values
print
或 loop
是生成器表达式
。同样,我尝试了 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>]}
最佳答案
使用extend
而不是append
。问题是您没有遍历生成器来获取结果,而只是将结果的 promise 放入字典中。
这段代码对我有用。
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']}
关于python - 无法在 Python 3 中打印生成器表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33728757/