Включите имя файла, чтобы быть частью преобразования xml в csv в Python

Я пытаюсь преобразовать файл 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()))))
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
102
1

Ответы 1

Пытаться

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)

Спасибо за ответ. Я получаю сообщение об ошибке AttributeError: 'xml.etree.ElementTree.Element' object has no attribute 'getroot' при попытке выполнить list_of_df.append(pd.DataFrame([file] + list(iter_docs(etree.getroot()))))

dark horse 05.03.2019 11:33

работает без [file]+. если это не так, ошибка находится где-то еще, и, вероятно, это отступ (при условии, что ваш собственный пример работает)

576i 05.03.2019 13:33

Другие вопросы по теме