【问题标题】:How to include filename variable inside python xml etree for cycle如何在python xml etree中包含文件名变量以进行循环
【发布时间】:2019-02-14 10:14:34
【问题描述】:

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

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

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

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

Traceback(最近一次调用最后一次):文件“/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)

【问题讨论】:

    标签: python xml elementtree


    【解决方案1】:

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

    【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 根本不要更改代码。只需在位于“/home/eikaf/xml”的目录中保留一个文件“filename.xml”,然后运行相同的代码。如果代码成功运行,请添加更多文件并运行相同的代码。如果运行成功,则将该组替换为另一组文件,依此类推。直到找到有问题的集合。然后在有问题的集合中缩小搜索范围。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-12
    • 1970-01-01
    • 2014-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-10
    相关资源
    最近更新 更多