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())
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
回报在每次迭代,从每个被调用时前一次迭代后立即恢复。
这可能是一个noob问题,但我如何在新行(\ n)上输出每个文件? –
@ShantanuGhare:没关系。你可以做'l = list(dirslist()); for x in l:print(x)'。使用for循环并遍历列表。 –
非常感谢!这真的帮助了我! –
使用返回语句自动结束函数。如果你打算使用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盘中的所有内容。 使用打印代替返回
只能“返回”一次,之后该功能结束。 – jonrsharpe
尝试所有for循环后返回数组? – jmunsch