Python定义函数输出只有第一个目录

问题描述:

当我定义一个函数,并尝试在其中使用os.walk时,输出只是目录中的第一个文件,我想打印出C驱动器中的所有文件。Python定义函数输出只有第一个目录

#os.chdir=("..") 
def dirslist(): 
for root, dirs, files in os.walk("c://", topdown=False): 
    for name in files: 
    return(os.path.join(root, name)) 
    for name in dirs: 
    return(os.path.join(root, name)) 

print(dirslist()) 
+2

只能“返回”一次,之后该功能结束。 – jonrsharpe

+0

尝试所有for循环后返回数组? – jmunsch

return在第一次迭代本身中返回。你想要的是从所有迭代中获取路径。一种方法是将return更改为yield。现在dirslist成为一个生成器函数,并逐一产生你的路径。

def dirslist(): 
    for root, dirs, files in os.walk("c://", topdown=False): 
     for name in files: 
      yield(os.path.join(root, name)) 
     for name in dirs: 
      yield(os.path.join(root, name)) 


print(list(dirslist())) 

的另一种方法,如果你不是一个人的发电机,是积累你的路在列表中,并返回来代替。

def dirslist(): 
    paths = [] 
    for root, dirs, files in os.walk("c://", topdown=False): 
     for name in files: 
      paths.append(os.path.join(root, name)) 
     for name in dirs: 
      paths.append(os.path.join(root, name)) 

    return paths 

print(dirslist()) 

这里要注意的主要问题是从函数return回报只有一次,而yield回报在每次迭代,从每个被调用时前一次迭代后立即恢复。

+0

这可能是一个noob问题,但我如何在新行(\ n)上输出每个文件? –

+0

@ShantanuGhare:没关系。你可以做'l = list(dirslist()); for x in l:print(x)'。使用for循环并遍历列表。 –

+0

非常感谢!这真的帮助了我! –

使用返回语句自动结束函数。如果你打算使用return,那么知道你的代码在那里结束。如果你想全部打印,然后连接所有的字符串,然后在一个返回结束时完成。

def dirslist(): 

answer = [] 
for root, dirs, files in os.walk("c://", topdown=False): 
    for name in files: 
    answer.append(os.path.join(root, name)) 

    for name in dirs: 
    answer.append(os.path.join(root, name)) 

return answer 

print(dirslist()) 

如果您想打印出C盘中的所有内容。 使用打印代替返回