Как включить переменную имени файла в python xml etree для цикла - PullRequest
0 голосов
/ 14 февраля 2019

Я не могу решить проблему в своем коде Python, и мне нужны некоторые подсказки.

Дело в том, что если я использую код без для цикла, непосредственно с

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

все работает как надо.Когда я пытаюсь присвоить file переменную для итерации имени файла внутри каталога, код зависает, сообщая мне следующую ошибку:

Traceback (последний вызов был последним): 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 голосов
/ 14 февраля 2019

Да, и это работает.Если я заменим file на filename.xml внутри tree = etree.parse(file, parser=parser), я смогу получить тот же результат для файла "n", существующего в каталоге.

0 голосов
/ 14 февраля 2019

Я предполагаю, что в каталоге есть хотя бы один файл, который не является допустимым XML-файлом.Можете ли вы запустить тот же код (с циклом for), просто сохранив файл filename.xml в каталоге?

...