Я пытался найти способ получить MAC-адрес и имя устройства из строки, содержащей другие бесполезные данные, мне удалось удалить ненужные данные из этой строки, но так как строка содержит более одного имени устройства и MAC-адреса, мне было трудно получить имя устройства и его MAC-адрес в двух разных строках или списках. Строка имеет такие данные, как:

'Устройство XX: XX: XX: XX: XX Device_name1

               Device XX:XX:XX:XX:XX Device_name2
               Device XX:XX:XX:XX:XX Device_name3

«Я использовал этот код:

t= e.splitlines(True)
print(len(t),t)

Я также использую Split ('\ n')

Все, что я получаю, это:

 226
 (16, [' \r\n', ' \r', '                        \r', ' Device 
 C4:XX:XX:XX:XX:XX name\r\n', ' \r', '                        \r', ' Device 
 55:XX:XX:XX:XX:XX name\r\n', ' \r', '                        \r', ' Device 
 XX:XX:XX:XX:XX:XX Name _XYXY\r\n', ' \r\n', '   \r\n', '  \r\n', ' \r', '                        
 \r', ' '])

После этого мне было трудно получить имя устройства и MAC-адрес в другую строку. Используя приведенный ниже код, я смог получить MAC-адрес от каждого элемента списка.

p = re.compile('(?:[0-9a-fA-F]:?){12}')
red = str(t)
ting = re.findall(p, red)   
print(ting)

Но я все еще пытаюсь найти способ получить имя устройства. Я хочу получить имя и MAC-адрес каждого устройства в отдельной строке, так как String1 = "MAC-адрес имени устройства" string2 = "MAC-адрес имени устройства".

Пожалуйста, поделитесь своим предложением Спасибо.

0
Aaron.0 24 Апр 2017 в 09:51

2 ответа

Лучший ответ

После разделения строк вам нужно будет разделить каждую строку по очереди. Вы можете использовать пустое пространство в качестве разделителя.

Вы можете использовать списки, чтобы сделать это легко. Например, получение MAC:

In [16]: devices = '''
    ...: Device XX:XX:XX:XX:XX Device_name2
    ...: Device XX:XX:XX:XX:XX Device_name3
    ...: '''

In [17]: [s.split(' ')[1] for s in devices.splitlines() if s]
Out[17]: ['XX:XX:XX:XX:XX', 'XX:XX:XX:XX:XX']
1
Dekel Paz 24 Апр 2017 в 07:05

Я думаю, что было бы уместно создать словарь имен с адресами. Можно неявно создавать строковые переменные, но я бы не рекомендовал это делать, так как словарь безопаснее и позволяет делать то же самое. Словарь также позволяет вам анализировать устройства, а если вы создадите отдельные строковые переменные, вы не сможете увидеть, какие переменные были созданы простым способом. Вот как я бы это сделал:

devices = '''
 Device XX:XX:XX:XX:XX Device_name2
 Device XX:XX:XX:XX:XX Device_name3
'''
dLines = devices.splitlines()

#If you want to make a dictionary:
devDict = dict([(device.split(' ')[3], device.split(' ')[2]) for device in dLines if device])
#Access specific adresses:
adress = devDict['Device_name2']

#If you want separate lists of names and adress:
adresses = [device.split(' ')[2] for device in dLines if device]
names = [device.split(' ')[3] for device in dLines if device]

Это дает следующие переменные:

>>> devDict
{'Device_name2': 'XX:XX:XX:XX:XX', 'Device_name3': 'XX:XX:XX:XX:XX'}
>>> devDict['Device_name2']
'XX:XX:XX:XX:XX'
>>> names
['Device_name2', 'Device_name3']
>>> adresses
['XX:XX:XX:XX:XX', 'XX:XX:XX:XX:XX']
0
Max Jonatan Karlsson 24 Апр 2017 в 09:22