当我定义一个函数并尝试在其中使用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())
答案 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,那么请知道您的代码在那里结束。如果你想打印所有字符串,然后连接所有字符串,然后在一次返回结束时完成所有字符串。