编程语言
首页 > 编程语言> > 以惯用的方式在Python中迭代os.walk中的各个文件

以惯用的方式在Python中迭代os.walk中的各个文件

作者:互联网

我开始使用从another stackoverflow question获得的一些代码来为目录树中的所有文件生成完整路径:

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)

我想添加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

这段代码很好,真的.当然不难发现发生了什么.但是使用连续追加操作将列表组合在一起并不完全是Pythonic.我的猜测是使用Python语法有更好的方法,可能是通过列表理解,并且学习它会有所启发.

我当然可以写:

def recursive_file_list(mydir):
    return list(recursive_file_gen(mydir))

并记住这一点.但我想知道是否有更清洁的东西.

解决方法:

怎么样?

result = [os.path.join(root, file) for root, dir, files in os.walk(mydir) for file in files]

标签:python,generator,list-comprehension,os-walk,list
来源: https://codeday.me/bug/20190528/1174688.html