Python定义函数仅输出第一个dir

时间:2017-06-20 19:21:36

标签: python python-2.7 function os.walk

当我定义一个函数并尝试在其中使用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())

4 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

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在每次迭代时返回,每次调用后都会在上一次迭代后立即恢复。

答案 2 :(得分:1)

如果您想打印C驱动器中的所有内容。 使用print而不是return

答案 3 :(得分:0)

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