Сравнение заданных значений со значениями из журнала инвентаризации?

#python #parsing #reporting

#python #синтаксический анализ #отчетность

Вопрос:

Мне нужно проверить значения в журнале инвентаризации, сравнить эти строки с заданными значениями и, если они не совпадают, сообщить об ошибке.

Это значения, которые должны иметь все журналы инвентаризации:

Информация об оборудовании

Процессор: Intel (R) Xeon (R) CPU E5-2420 0 @ 1,90 ГГц

Объем памяти: 65493 МБ

Слот контроллера: 0

BIOS: 3.0b 28.03.2014 3.2

Версия IPMI FW: 2.24

Итак, как я могу прочитать эти значения, сравнить их с этими значениями: 3.0b, 2.24 и т. Д. И если они не совпадают, Сообщить об ошибке? На данный момент я работаю с этим.

  i = 0
while i < len( inventory_lines):
    m = re.search( '(^ERROR:s .*)', inventory_lines[i] )
    i  = 1
    if m:
        arack = findRack( Lab, Rack )
        aslot = findSlot( arack, Slot )
        append_uniq_scanIssues( aslot, m.group(1) )
        print '%s SCAN ISSUES: %s' % ( linenum(), m.group(1) )
  

Комментарии:

1. Проверьте модуль csv . Также было бы полезно, если бы вы добавили к своему вопросу образец ваших данных CSV.

2. Ваш код на самом деле не имеет смысла по сравнению с вашим вопросом. Что пытается сделать это регулярное выражение?

3. @mhawke Я сделал блок над кодом — это CSV-файл.

4. @JamieCockburn регулярное выражение получает строку из журналов инвентаризации и помещает их рядом с сообщением об ошибке или автоматическим сообщением, которое появляется позже в коде, я не уверен на 100 процентов.

5. @Intern_Bob Ах, тогда это не данные CSV (CSV означает значения, разделенные запятыми). Вы хотите сказать, что ваши данные отформатированы точно так, как вы показали? И если да, есть ли несколько таких записей в одном файле?

Ответ №1:

Предполагая, что ваш csv выглядит следующим образом:

 Processor,Memory,Controller Slot, BIOS,IPMI FW rev
Intel(R) Xeon(R) CPU E5-2420 0 @ 1.90GHz,65493MB,0,3.0b 03/28/2014 3.2,2.24
...
  

Вы хотите что-то вроде этого:

 import csv

good_values = {
    'Processor': 'Intel(R) Xeon(R) CPU E5-2420 0 @ 1.90GHz',
    'Memory':, '65493MB'
    'Controller Slot': '0',
    'BIOS': '3.0b 03/28/2014 3.2',
    'IPMI FW rev': '2.24',
    }

for i, line in enumerate(csv.DictReader(open("INVENTORY FILE"))):
    if line != good_values:
        print "Error: on line %s" % (i)