#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)