如何使用glob()递归查找文件?

这就是我所拥有的: python

glob(os.path.join('src','*.c'))

但我想搜索src的子文件夹。 这样的事情会起做用: python2.7

glob(os.path.join('src','*.c'))
glob(os.path.join('src','*','*.c'))
glob(os.path.join('src','*','*','*.c'))
glob(os.path.join('src','*','*','*','*.c'))

但这显然是有限且笨拙的。 spa


#1楼

Johan和Bruno针对上述最低要求提供了出色的解决方案。 我刚刚发布了Formic ,它实现了Ant FileSet和Globs ,能够处理这种状况以及更复杂的状况。 您的要求的实现是: code

import formic
fileset = formic.FileSet(include="/src/**/*.c")
for file_name in fileset.qualified_files():
    print file_name

#2楼

基于其余答案,这是我当前的工做实现,它在根目录中检索嵌套的xml文件: orm

files = []
for root, dirnames, filenames in os.walk(myDir):
    files.extend(glob.glob(root + "/*.xml"))

我真的很喜欢python :) xml


#3楼

最近,我不得不恢复扩展名为.jpg的图片。 我运行了photorec并恢复了4579个目录,其中220万个文件具备多种扩展名。使用如下脚本,我可以在几分钟内选择50133个具备.jpg扩展名的文件: 图片

#!/usr/binenv python2.7

import glob
import shutil
import os

src_dir = "/home/mustafa/Masaüstü/yedek"
dst_dir = "/home/mustafa/Genel/media"
for mediafile in glob.iglob(os.path.join(src_dir, "*", "*.jpg")): #"*" is for subdirectory
    shutil.copy(mediafile, dst_dir)

#4楼

Johan Dahlin答案的简化版本,不带fnmatchget

import os

matches = []
for root, dirnames, filenames in os.walk('src'):
  matches += [os.path.join(root, f) for f in filenames if f[-2:] == '.c']

#5楼

或具备列表理解: it

>>> base = r"c:\User\xtofl"
 >>> binfiles = [ os.path.join(base,f) 
            for base, _, files in os.walk(root) 
            for f in files if f.endswith(".jpg") ]
相关文章
相关标签/搜索