Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 3, 2013 00:47:51

MonaxGT
Зарегистрирован: 2013-04-11
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг CSV

Добрый день. Столкнулся в проблемой парсинга csv файла и созданием конфигурационных файлов по данным таблицы. Я написал небольшой код. Программа берет csv файл и разбирает его по делителям. Выписывает в консоль и в файл построчно данные. Необходимо чтобы программа либо генерировала новый конфиг ( шаблон уже готов и есть переменные, которые в зависимости от строки менялись) или парсила уже готовый шаблон и вставляла в нужное место нужное значение. Затруднение в том, что программа выдает данные построчно:


1, 2, IF-MIB::ifDescr.51 = STRING: GigabitEthernet6/0/40, 192.33.73.124/24

необходимо чтобы из первого и второго собирался HOSTNAME, из остальных так же собирался IP адрес и т.п. и вставлялся в определенные места шаблона. Побывал разные способ, читал мануал http://docs.python.org/2/library/csv.html , но не могу найти как решить проблему. Прошу помощи у спецов)

Шаблон в который вставлять ( генерировать) выглядит так :

<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>2.0</version>
<date>2013-07-31T11:56:38Z</date>
<groups>
<group>
<name>Object</name>
</group>
</groups>
<hosts>
<host>
<host>HOSTNAME</host>
<name>HOSTNAME</name>
<proxy/>
<status>0</status>
<ipmi_authtype>-1</ipmi_authtype>
<ipmi_privilege>2</ipmi_privilege>
<ipmi_username/>
<ipmi_password/>
<templates>
<template>
<name>Template PING </name>
</template>
</templates>
<groups>
<group>
<name>Object</name>
</group>
</groups>
<interfaces>
<interface>
<default>1</default>
<type>2</type>
<useip>1</useip>
<ip>192.33.73.124</ip>
<dns/>
<port>161</port>
<interface_ref>if1</interface_ref>
</interface>
</interfaces>
<applications/>
<items/>
<discovery_rules/>
<macros/>
<inventory/>
</host>
</hosts>
</zabbix_export>

Код программы, которую я написал:
Кликните здесь для просмотра всего текста

# -*- coding: utf-8 -*-
import csv
i = 0
with open ('csv.csv') as csvfile:
    finder = csv.reader (csvfile, delimiter = ',', quotechar =  ';')
    for row in finder :
        file = open("test"+str(i)+".xml", "w")
        i = i +1
        print ', '.join(row)
    file.close()

Офлайн

#2 Авг. 4, 2013 19:08:44

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Парсинг CSV

Может стоит использовать шаблонизаторы?
Your text to link here…



Офлайн

#3 Авг. 4, 2013 19:57:07

Alen
Зарегистрирован: 2013-08-01
Сообщения: 373
Репутация: +  49  -
Профиль   Отправить e-mail  

Парсинг CSV

Шаблон в который вставлять ( генерировать) выглядит так

Шаблон в который вставляете присвойте какой-либо переменной при помощи тройных кавычек.
Места в которые вставлять данные будете пометье фигурными скобками {} , можете номерами их пометить {0},{1} и т.п.
Вставляйте данные методом format

Пример:
template = '''
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>2.0</version>
<date>{0}</date>
<groups>
<group>
<name>Object</name>
</group>
</groups>
<hosts>
<host>
<host>{1}</host>
....
'''
content = template.format(date,hostname)
with open('myfile.xml','w') as f:
    f.write(content)

P.S. Для работы с csv рекомендую посмотреть http://csvkit.readthedocs.org/en/latest/

Отредактировано Alen (Авг. 4, 2013 19:59:48)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version