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
Пожалуйста, покажите мне, как это можно сделать. Спасибо за вашу помощь.