递归解析所有xml文件并排除文件夹

时间:2017-02-13 20:02:08

标签: python xml lxml elementtree

我正在尝试解析给定文件夹/子文件夹中的所有XML文件,并搜索和替换该XML中的文本。同时排除子文件夹" Archive"。我收到错误" AttributeError:' NoneType'对象没有属性'替换'"不确定我缺少什么,但是一旦它到达ElementTree以打开并解析XML,我的循环似乎就会消失。

for roots, dirs, files in os.walk("C:\test", topdown=True):
    if 'Archive' in dirs:
        dirs.remove('Archive')
    #dirs[:] = [d for d in dirs if 'Archive' not in d]
    for f in files:
        if f.endswith('.xml'):
            try:
                with open(os.path.join(roots, f), 'r') as xml:
                  tree = ET.parse(xml)
                  root = tree.getroot()

                  for elem in root.getiterator():
                    try:
                      print (elem.text)
                      elem.text = elem.text.replace('_THUMBNAIL.jpg', '.mxd.jpg')

                    except ET.ParseError:
                        pass

                tree.write(xml, encoding='utf-8')
            except FileNotFoundError:
                pass

1 个答案:

答案 0 :(得分:0)

我想并非所有XML标签都有文本。所以你应该使用

if elem.text is not None :
    try:
        print (elem.text)
        elem.text = elem.text.replace('_THUMBNAIL.jpg', '.mxd.jpg')