Форум сайта python.su
0
Привет всем! Есть такая задача. Парсить xml-файл и писать в базу данные. Но данные надо писать специфично, в разные таблицы.
Пример - есть файл типа
<sensor ID=“{18F46E2E-2469-4367-8F9E-8B32A9648A44}” >
<stat var=“123” var2=“456” ID=“{18F46E2E-2469-4367-8F9E-8B32A9648A44}”>
<stat var=“123” var2=“456” ID=“{18F46E2E-2469-4367-8F9E-8B32A9648A44}”>
<stat var=“123” var2=“456” ID=“{18F46E2E-2469-4367-8F9E-8B32A9648A44}”>
</sensor>
<sensor ID=“{2AA7AFBB-9149-44E2-8638-EF7EA6970CAC}” >
<stat var=“123” var2=“456” ID=“{2AA7AFBB-9149-44E2-8638-EF7EA6970CAC}”>
<stat var=“123” var2=“456” ID=“{2AA7AFBB-9149-44E2-8638-EF7EA6970CAC}”>
<stat var=“123” var2=“456” ID=“{2AA7AFBB-9149-44E2-8638-EF7EA6970CAC}”>
</sensor>
Парсер вытаскивает значения stat var и var2 и ID. Нужно писать так:
Все что с ID=“{18F46E2E-2469-4367-8F9E-8B32A9648A44} писать в одну таблицу
Все что с ID=”{2AA7AFBB-9149-44E2-8638-EF7EA6970CAC}" писать в другую.
Как? )
Офлайн
253
1 определитесь в какую базу будете писать.
2 Определитесь со структурой базы данных. Отсюда будет следовать метод записи и пакеты которые для этого надо использовать.
3 Парсить можно с использованием пакетов xml/lxml. Если файл всегда выглядит так как вы написали то можно вытащить данные регулярными выражениями.
lxml - сложнее код, но более корректный результат.
re - проще код и парсер на два порядка быстрее, но будут приключения при изменении формата, Трудно обработать большие файлы.
У меня практически всегда получается что re лучше использовать.
Офлайн
0
Парсер уже работает. На выходе имею
123 456{18F46E2E-2469-4367-8F9E-8B32A9648A44}
123 456{18F46E2E-2469-4367-8F9E-8B32A9648A44}
123 456{18F46E2E-2469-4367-8F9E-8B32A9648A44}
123 456 {2AA7AFBB-9149-44E2-8638-EF7EA6970CAC}
123 456 {2AA7AFBB-9149-44E2-8638-EF7EA6970CAC}
123 456 {2AA7AFBB-9149-44E2-8638-EF7EA6970CAC}
и т.п.
Теперь задача записать все в разные таблицы. В базе есть таблицы, под каждый ID ({2AA7…..0CAC})
например все строки
123 456 {2AA7AFBB-9149-44E2-8638-EF7EA6970CAC}
123 456 {2AA7AFBB-9149-44E2-8638-EF7EA6970CAC}
123 456 {2AA7AFBB-9149-44E2-8638-EF7EA6970CAC}
должны записаться в таблицу {2AA7AFBB-9149-44E2-8638-EF7EA6970CAC}
все строки
123 456{18F46E2E-2469-4367-8F9E-8B32A9648A44}
123 456{18F46E2E-2469-4367-8F9E-8B32A9648A44}
123 456{18F46E2E-2469-4367-8F9E-8B32A9648A44}
должны оказаться в таблице {18F46E2E-2469-4367-8F9E-8B32A9648A44}
и так далее.
Офлайн