递归查找所有带有扩展名的文件

时间:2019-11-13 11:36:16

标签: python python-3.x


我需要对一组XML文件执行一些自动操作。我只是在学习Python,所以我一直在寻找类似的答案,并提出以下建议:

root_dir='/home/user/git/code'
for filename in glob.iglob(root_dir + '**/*.xml', recursive=True):
    print(filename)

上述代码的问题在于,它仅找到位于“ / home / user / git / code”上的顶级XML文件,而不是嵌套在该文件夹下的所有XML文件。标记“递归”设置为true,所以我想知道这可能是什么问题。 任何想法? 谢谢

3 个答案:

答案 0 :(得分:2)

您在/code之间忘记了**,因此您拥有code**而不是code/**

您最后需要/

 root_dir='/home/user/git/code/'

或以

开头
'/**/*.xml'

或者使用os.path.join()代替+

os.path.join(root_dir, '**/*.xml')

答案 1 :(得分:1)

我在自己的项目中不断使用此功能。希望它能为您服务。

import os, glob

def get_files(path, extension, recursive=False):
    """
    A generator of filepaths for each file into path with the target extension.
    If recursive, it will loop over subfolders as well.
    """
    if not recursive:
        for file_path in glob.iglob(path + "/*." + extension):
            yield file_path
    else:
        for root, dirs, files in os.walk(path):
            for file_path in glob.iglob(root + "/*." + extension):
                yield file_path

示例:my_desktop_pdfs = list(get_files('users/xx/Desktop','pdf'))

在您的情况下:

for f in get_files(root_dir, 'xml', recursive=True):
    print(f)

答案 2 :(得分:0)

我不知道glob.iglob,但是os.walk应该会产生相同的结果:

import os
for root, dirs, files in os.walk('/home/user/git/code'):
    for file in files:
        if (file.endswith('.xml')):
            print(file)