我需要对一组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,所以我想知道这可能是什么问题。 任何想法? 谢谢
答案 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)