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

Python defining function outputs only first dir

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

#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())

使用return语句自动结束函数。如果您打算使用 return,那么请知道您的代码到此结束。如果你想全部打印出来,那么连接所有的字符串,然后在最后做一个 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())

return returns 在第一次迭代中。您想要的是从所有迭代中获取路径。一种方法是将 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()))

如果您不是生成器人员,另一种方法是将您的路径累积在列表中,然后 return 相反。

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 returns 从一个函数只执行一次,而 yield returns 在每次迭代时,从之后立即恢复每次调用前一次迭代。

如果你想把C盘里的都打印出来。 使用 print 而不是 return