Я пытался найти способ получить 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-адрес имени устройства".
Пожалуйста, поделитесь своим предложением Спасибо.
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']
Я думаю, что было бы уместно создать словарь имен с адресами. Можно неявно создавать строковые переменные, но я бы не рекомендовал это делать, так как словарь безопаснее и позволяет делать то же самое. Словарь также позволяет вам анализировать устройства, а если вы создадите отдельные строковые переменные, вы не сможете увидеть, какие переменные были созданы простым способом. Вот как я бы это сделал:
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']
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.