【问题标题】:Create a list of all files in directory and subdirectories in python在python中创建目录和子目录中所有文件的列表
【发布时间】:2012-09-18 00:26:36
【问题描述】:

我想提出列出目录及其子目录中所有文件的最佳方式。完成后,我想过滤掉它们。因此,最好分两行完成:

def getFilesContaining(filename):
    files = map(lambda x: os.path.join(x, file), os.walk('.')) #Note: this map does NOT work
    filtered_files = filter(lambda x: filename in x, files)
    return filtered_files 

【问题讨论】:

  • 2 行与最优有什么关系?

标签: python map lambda python-2.7 directory-listing


【解决方案1】:
def getFilesContaining(filename):
    paths = (os.path.join(root, f) for root, dirs, files in os.walk('.')
             for f in files) 
    return (path for path in paths if filename in path)

这将返回一个迭代器。在您的版本中,filter 返回一个列表。如果您真的想要一个列表,请将返回值更改为列表理解,方法是将外括号 (...) 替换为括号 [...]

【讨论】:

  • 太棒了。这正是我想要的。在效率方面,我不确定我是否喜欢三重 for 循环。该循环与 os.system('find .') 之类的循环的效率有什么区别?哪个效率更高?
  • 好吧,我只是做了一个 560MB 目录的小实验,并且(不足为奇)os.system('find . -type f -name "*a*"')list(getFilesContaining('a')) 快。
猜你喜欢
  • 2012-11-14
  • 2014-11-10
  • 2012-09-02
  • 2014-10-16
  • 2011-03-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多