如何将文件名变量包含在python xml etree中以进行循环

时间:2019-02-14 10:14:35

标签: python xml elementtree

我无法在python代码中解决问题,我需要一些提示。

事实是,如果我使用的代码没有for循环,则直接使用

tree = etree.parse('filename.xml', parser=parser) 

一切正常。当我尝试为file分配一个变量来迭代目录内的文件名时,代码挂起,出现以下错误:

  

回溯(最近一次通话最后一次):文件“ /home/eikaf/test.py”,行   45,在       ragsocemittente = root.find('.// FatturaElettronicaHeader // CedentePrestatore // DatiAnagrafici // Anagrafica // Denominazione')   AttributeError:'NoneType'对象没有属性'find'

path = '/home/eikaf/xml'
for dirpath, dirnames, filenames in os.walk(path):
    for file in filenames:
        #print(file)
        #print(filenames)
        tree = etree.parse(file, parser=parser)
        root = tree.getroot()


        ragsocemittente = root.find('.//FatturaElettronicaHeader//CedentePrestatore//DatiAnagrafici//Anagrafica//Denominazione')

        if ragsocemittente is None:
            ragsocemittente = ''
            ragsocemittentecognome = root.find('.//FatturaElettronicaHeader//CedentePrestatore//DatiAnagrafici//Anagrafica//Cognome')
            ragsocemittentenome = root.find('.//FatturaElettronicaHeader//CedentePrestatore//DatiAnagrafici//Anagrafica//Nome')
            #print("Ragione Sociale Emittente " + ragsocemittentecognome.text + " " + ragsocemittentenome.text)
            ragsocemittentegiust = str(ragsocemittentecognome.text + " " + ragsocemittentenome.text).ljust(32)
        else:
            #print("Ragione Sociale Emittente: " + ragsocemittente.text)
            ragsocemittentegiust = str(ragsocemittente.text).ljust(32)


        print(ragsocemittente.text)

2 个答案:

答案 0 :(得分:0)

我的猜测是目录中至少有一个文件不是有效的XML文件。您只需将filename.xml保留在目录中就可以运行相同的代码(带有for循环)?

答案 1 :(得分:0)

是的,并且有效。如果我将file中的filename.xml替换为tree = etree.parse(file, parser=parser),则对于目录中存在的“ n”个文件,我可以获得相同的结果。