Форматировать SystemID в IP-адрес - PullRequest
0 голосов
/ 23 октября 2019

CSV-файл содержит данные systemid, имени хоста и типа. Интересует список systemid и имени хоста. Создайте список systemid и список имен хостов и объедините оба списка в новый файл. Прежде чем я сделаю это, мне нужно конвертировать systemid в правильный формат IP-адреса. Это нормально, если systemid, например, (0100.2410.9001) содержит все номера и может получить их на действительный IP-адрес, например (10.24.109.1). Проблема теперь, если systemid содержит несколько буквенно-цифровых символов (0100.2410.902b), и это приведет к ошибке и остановит выполнение скрипта.

Фрагмент использования скрипта для чтения файла, получения списка systemid / ip и спискаимя хоста.

#Open csv file and readlines to content
with open('systemid_hostname.csv') as f:
   content = f.readlines()

#strip content
content = [l.strip() for l in content if l.strip()]
ipList = [] #list of IPaddress
stList = [] #list of hostname

#for systemid list, slice onto 4 part/octet and each octet contain 3numbers as #a valid ip address. This will also maintain 3 number in each octet and remove #unwanted leading zero or maintain zero if all 3 number is zero such as (013 #become 13, 001 become 1, 000 become 0, 200 become 200)

for line in content[1:-1]:
   stList.append(line[1:].split(" ")[1])
   f = itemgetter(slice(0,3), slice(3,6), slice(6,9), slice(9,12))
   line = '.'.join(f(line.replace('.','')))
   line = '{}.{}.{}.{}'.format(*map(int, f(line.replace('.', ''))))
   ipList.append(line)

#Combine list of clean valid ipaddress and hostname into a new file)
with open(outFile, "w") as f:
   for index in range(len(ipList)):
      f.write(str(ipList[index]) + " " + str(stList[index]) + "\n")

systemid.csv Содержимое systemid, имя хоста и тип.

System ID      Hostname                                         Type
0100.9100.024b dev.sprt1                                        Dynamic
0102.3322.4001 devlab10                                         Dynamic
0102.3322.4002 re1.lab2                                         Dynamic
0202.1020.0007 sp10.sprt1                                       Dynamic
<snippet>

Когда я запускаю скрипт, я получаю ошибку ниже, и это связано с первой строкой systemid (0100.9100.024b), которая содержит не числовой символ (не int, 24b)

line = '{}.{}.{}.{}'.format(*map(int, f(line.replace('.', ''))))
ValueError: invalid literal for int() with base 10: '24b

Это не может быть установлено на 10.91.0.24b и его недействительный IP вообще. Можно ли (1) запустить и пропустить те systemid, которые содержат алфавит, или (2) запустить и принять, но при этом сохранить действительный 4-октетный IP-адрес. Я предпочитаю вариант (1), чтобы избежать или пропустить любой systemid, получивший алфавит. Я могу использовать try / catch ...

Ожидаемый список выглядит следующим образом outFile.txt

10.233.224.1 devlab10                                         
10.233.224.2 re1.lab2                                         
20.210.200.7 sp10.sprt1

Пожалуйста, покажите мне, как это можно сделать. Спасибо за вашу помощь.

...