kuz*_*roo 4 python list-comprehension list generator os.walk
我从另一个stackoverflow问题中得到的一些代码开始,为目录树中的所有文件生成完整路径:
import os
def recursive_file_gen(mydir):
for root, dirs, files in os.walk(mydir):
for file in files:
yield os.path.join(root, file)
Run Code Online (Sandbox Code Playgroud)
我想添加memoization,在我看来,最简单的实现方法就是让recursive_file_gen返回一个列表:
def recursive_file_list(mydir):
result = []
for root, dirs, files in os.walk(mydir):
for file in files:
result.append(os.path.join(root, file))
return result
Run Code Online (Sandbox Code Playgroud)
这段代码很好,真的.当然不难发现发生了什么.但是使用连续append操作组合列表并不完全是Pythonic.我的猜测是使用Python语法有更好的方法,可能是通过列表理解,并且学习它会有所启发.
我当然可以写:
def recursive_file_list(mydir):
return list(recursive_file_gen(mydir))
Run Code Online (Sandbox Code Playgroud)
并记住这一点.但我想知道是否有更清洁的东西.
怎么样?
result = [os.path.join(root, file) for root, dir, files in os.walk(mydir) for file in files]
Run Code Online (Sandbox Code Playgroud)