如何删除 python 中列表的一部分元素
how to remove a part of element of list in python
我一直试图找到一种方法从包含其他无用数据的字符串中获取 MAC 地址和设备名称,我设法从该字符串中删除了不必要的数据,但由于该字符串包含多个设备名称和 MAC 地址我发现很难在两个不同的字符串中获取设备名称及其 MAC 地址或 list.The 字符串具有如下数据:
' 设备 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)
但我仍在尝试找出一种方法来获取设备 name.i 想要获取每个设备的名称和 MAC 地址在不同的字符串中作为 String1="Device name MAC address" string2= "Device name MAC address"。
请分享您的建议谢谢。
分割线后,您需要一根一根地分割每一行。您可以使用空 space 作为分隔符。
您可以使用列表理解来简化此操作。例如,获取 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']
我一直试图找到一种方法从包含其他无用数据的字符串中获取 MAC 地址和设备名称,我设法从该字符串中删除了不必要的数据,但由于该字符串包含多个设备名称和 MAC 地址我发现很难在两个不同的字符串中获取设备名称及其 MAC 地址或 list.The 字符串具有如下数据:
' 设备 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)
但我仍在尝试找出一种方法来获取设备 name.i 想要获取每个设备的名称和 MAC 地址在不同的字符串中作为 String1="Device name MAC address" string2= "Device name MAC address"。
请分享您的建议谢谢。
分割线后,您需要一根一根地分割每一行。您可以使用空 space 作为分隔符。
您可以使用列表理解来简化此操作。例如,获取 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']