我一直试图找到一种方法从包含其他无用数据的字符串中获取MAC地址和设备名称,我设法从该字符串中删除不必要的数据,但因为该字符串包含多个设备名称和MAC地址我发现很难在两个不同的字符串或列表中获取设备名称及其MAC地址。字符串包含如下数据:
'设备XX:XX:XX:XX:XX设备名称1
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 :(得分:1)
拆分线后,您需要逐行拆分每一条线。您可以使用空格作为分隔符。
您可以使用列表理解来简化这一过程。例如,获取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 :(得分:0)
我认为您可以使用地址创建名称字典。可以隐式创建字符串变量但我不推荐它,因为字典更安全并且允许您执行相同的操作。字典还允许您解析设备,而如果您要创建单独的字符串变量,则无法以简单的方式查看创建的变量。我就是这样做的:
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']