Я разбираю xml-файл на ноутбуке jupyter и использую этот код для открытия файла:
from lxml import etree as ET
tree = ET.parse('C:\Users\mysky\Documents\Decoded\F804187.xml')
root = tree.getroot()
И после этого я выполняю некоторую обработку с помощью xpath и pandas, например, я делаю:
CODE = [ ]
for errors in root.findall('.//Book/Message/Param/Buffer/Data/Field[11]'):
error_code = errors.find('RawValue').text
if error_code is not None:
CODE.append(error_code)
У меня есть около 10 таких небольших блоков кода для извлечения данных, и в конце я сохраняю фрейм данных в файле CSV.
У меня много XML-файлов, и я хочу прочитать все файлы в моем каталоге Decoded один за другим, а затем обработать их один за другим и добавить каждый результат в свой CSV-файл.
Спасибо!






Чтобы перечислить все файлы xml в вашем каталоге, вы можете использовать например glob(второй ответ).
Это может выглядеть так:
import glob
files = glob.glob('C:\Users\mysky\Documents\Decoded\*.xml')
for file in files:
tree = ET.parse(file)
root = tree.getroot()
CODE = [ ]
for errors in root.findall('.//Book/Message/Param/Buffer/Data/Field[11]'):
error_code = errors.find('RawValue').text
if error_code is not None:
CODE.append(error_code)
Почему бы не определить функцию для объединения этих 5 блоков кода?
Спасибо @Qback, работает. Но когда я запускаю другие коды для обработки моих XML-данных, требуется только первый файл. Итак, как я могу сделать это с помощью цикла, который обрабатывает файлы один за другим. Например, если у меня есть 5 таких блоков кода:
CODE = [ ] for errors in root.findall('.//Book/Message/Param/Buffer/Data/Field[11]'): error_code = errors.find('RawValue').text if error_code is not None: CODE.append(error_code)Я хочу, чтобы для каждого файла выполнялся код 1, 2, 3, 4 и 5, а затем перезапускался для следующего файла, подобного этому, до конца моего списка файлов.