Найти - Пользователи
Полная версия: Отфарматировать вывод данных
Начало » Python для новичков » Отфарматировать вывод данных
1
komito
Здравствуйте.
Я совсем новичек. Столкнулся с такой проблемой. Занимаюсь мониторингом серверов через Zabbix. У него есть свой API. Стоит задача посредством скрипта на питоне подключаться к серверу мониторинга и вытаскивать данные о принтерах и их счетчиках и складывать в файл. Выходной файл должен иметь формат вида:
<имя принтра>,'\t',<счетчик принтера>
Я подключаюсь и получаю данные, но не могу их записать именно в две колонки через табуляцию. То есть получаю вывод вида:
<имя принтера P1>
<имя принтера P2>
….
<имя принтераPn>
<счетчик принтера P1>
<счетчик принтера P1>
…..
<счетчик принтера Pn>

Привожу листинг кода и надеюсь на помощь.
 from pyzabbix import ZabbixAPI
zapi = ZabbixAPI("http://*****/zabbix")
zapi.login("******", "*******")
item_name='Print_counter'
hosts = zapi.host.get(                               #get printers  name
                groupids=8,
                output=['name'])
items = zapi.item.get(                               #get printers counter
                groupids=8,
                output=['lastvalue'],
                filter={'name':item_name})
for host in hosts:
        print host['name']
for item in items:
        print item['lastvalue']
doza_and
komito
Выходной файл должен иметь формат вида:
<имя принтра>,'\t',<счетчик принтера>
Этот формат назывался бы tab separated values если бы у вас не было символов <> и ,.
komito
То есть получаю вывод вида:…
Не удивительно, что запрограммировали то и получили. Поясните как вы хотели получить табуляции если вы их не печатаете?
Не требуется сочинять код для записи данных формате tsv:
 import numpy as np 
a = np.array([["a",2],["b",3]])
np.savetxt("out.tsv", a, fmt="%s", delimiter="\t")

komito
Спасибо за ответ. Я некоректно описал задачу. Конечно мне не нужны символы <>. Мне просто нужен вывод вида:
имя принтера “табуляция” счетчик
Примерно так:
HP1212 3605
И конечно я пробовал через табуляцию выводить:
 item_name='Print_counter'
hosts = zapi.host.get(                               #get printers  name
                groupids=8,
                output=['name'])
items = zapi.item.get(                               #get printers counter
                groupids=8,
                output=['lastvalue'],
                filter={'name':item_name})
for host in hosts:
        for item in items:
                print host['name'],'\t',item['lastvalue']
Этот код выводить столлбцы через табуляцию, но несколько раз повторяет имена принтеров и получается каша
Вот этот код:
 for host in hosts:
        a=host['name']
for item in items:
        b=item['lastvalue']
print a,'\t',b
..выводит только последнюю пару принтер-счетчик
А вот этот:
 for host in hosts:
        a=host['name']
for item in items:
        b=item['lastvalue']
        print a,'\t',b
.. выводит столбец счетчиков нормально, а в качестве имени принтера у всех принтеров указывает последнее имя из списка принтеров.
Понимаю, что задаче скорее всего тривиальная, но как ее решить пока не знаю.
doza_and
А почему вы не пробовали?
  for host, item in zip(hosts,items):
      .....
komito

doza_and
А почему вы не пробовали?

for host, item in zip(hosts,items):
…..


Спасибо, так все получилось.
Всем спасибо кто помог.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB