Python定义函数只输出第一个di

2024-10-01 09:37:29 发布

您现在位置:Python中文网/ 问答频道 /正文

当我定义一个函数并尝试使用os.步行其中,输出只是目录中的第一个文件,我想打印出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())

Tags: 文件path函数nameinforreturn定义
3条回答
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在第一次迭代中返回。您想要的是从所有迭代中获取路径。一种方法是将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在每次迭代时返回,每次调用前一次迭代后立即恢复。你知道吗

如果你想打印出C盘上所有的文件。 使用打印而不是返回

相关问题 更多 >