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