Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';t在Python 3中打印生成器表达式_Python_Python 3.x - Fatal编程技术网

Can';t在Python 3中打印生成器表达式

Can';t在Python 3中打印生成器表达式,python,python-3.x,Python,Python 3.x,我尝试了print(list(..),它应该可以工作,但在本例中没有 我正在创建一个字典,其中目录名称为键,以及一个列表,其中每个目录中的文件名称为as值。我正在使用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

我尝试了
print(list(..)
,它应该可以工作,但在本例中没有

我正在创建一个
字典
,其中
目录
名称为
,以及一个
列表
,其中每个
目录
中的
文件
名称为as
。我正在使用
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)
我将
字典
作为输出,但我无法通过
打印或
循环
,这些值是
生成器表达式
。我再次尝试了
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>]}
{'folder4':[],'folder5':[],'subfolder6':[],'subfolder4':[],'subfolder5':[],'forder2':[],'folder6':[],'folder3':[],'folder1':[]}

使用
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)
编辑:

好吧,我一定是错过了什么。。。目录名是该目录中所有目录的列表,文件名只是该目录中的所有文件,而不是子目录。我知道这件事有点不对劲。所以我把范围限制在一个文件夹中,这样我可以很容易地看到里面有哪些文件,并做了一些测试。我们让事情变得更加复杂

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

使用
d[f]=z
代替
d[f]。追加(i代表z中的i)

试试这个

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)

然后我得到空列表
目录值([[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[])
这些目录中有文件吗?我看到了您上次的编辑,但我仍然得到空列表作为值。我的文件夹中有图像文件,但这不会导致此问题。我不明白发生了什么。好吧,我现在明白了。看一看。:)对你完全正确!它起作用了!你完全正确,我应该保持简单。非常感谢你的帮助!我尝试了这两种方法,但都返回空的
列表
。文件夹中的文件是图像,这可能是问题所在。我不这么认为,因为这应该只返回
文件名的
列表,而不管
文件类型如何。我简直无法想象为什么我会得到这些空列表或无法打印的
生成器表达式。可能您有错误的
路径\u文件夹
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)
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)