Я пытаюсь преобразовать файл XML в csv. У меня есть приведенный ниже код, работающий именно для этого. Однако я также пытаюсь включить имя файла в состав экстракта, но не могу включить его в этот код.
df = pd.DataFrame()
for file in allFiles:
def iter_docs(cis):
for docall in cis:
doc_dict = {}
for doc in docall:
tag = [elem.tag for elem in doc]
txt = [elem.text for elem in doc]
if len(tag) > 0:
doc_dict.update(dict(zip(tag, txt)))
else:
doc_dict[doc.tag] = doc.text
yield doc_dict
etree = ET.parse(file)
df = df.append(pd.DataFrame(list(iter_docs(etree.getroot()))))






Пытаться
df = df.append(pd.DataFrame([file] + list(iter_docs(etree.getroot()))))
чтобы получить столбец с добавленным именем файла
Кстати, такой подход даст вам плохую производительность.
Лучший подход - собрать df в список и преобразовать его в большой в конце.
list_of_df = []
for file in allFiles:
def iter_docs(cis):
# your code
list_of_df.append(pd.DataFrame([file] + list(iter_docs(etree.getroot()))))
# at the end
df = pd.concat(list_of_df)
работает без [file]+. если это не так, ошибка находится где-то еще, и, вероятно, это отступ (при условии, что ваш собственный пример работает)
Спасибо за ответ. Я получаю сообщение об ошибке
AttributeError: 'xml.etree.ElementTree.Element' object has no attribute 'getroot'при попытке выполнитьlist_of_df.append(pd.DataFrame([file] + list(iter_docs(etree.getroot()))))