Python/Regex-使用split提取数据
我的示例文本如下所示:Python/Regex-使用split提取数据,python,regex,Python,Regex,我的示例文本如下所示: data = """ NAME: "Chassis", DESCR: "Nexus5548 Chassis" PID: N5K-C5548UP , VID: V01 , SN: SSI1F8A204LK NAME: "Module 1", DESCR: "O2 32X10GE/Modular Universal Platform Supervisor" PID: N5K-C5548UP , VID: V01 , S
data = """
NAME: "Chassis", DESCR: "Nexus5548 Chassis"
PID: N5K-C5548UP , VID: V01 , SN: SSI1F8A204LK
NAME: "Module 1", DESCR: "O2 32X10GE/Modular Universal Platform Supervisor"
PID: N5K-C5548UP , VID: V01 , SN: FOC1FS7Q2P
NAME: "Module 2", DESCR: "O2 16X10GE Ethernet Module"
PID: N55-M16P , VID: V01 , SN: FOC15840LYH
NAME: "Fan 1", DESCR: "Chassis fan module"
PID: N5548P-FAN , VID: N/A , SN: N/A
NAME: "Fan 2", DESCR: "Chassis fan module"
PID: N5548P-FAN , VID: N/A , SN: N/A
NAME: "Power supply 1", DESCR: "AC power supply"
PID: N55-PAC-750W , VID: V02 , SN: ART18790WA
NAME: "Power supply 2", DESCR: "AC power supply"
PID: N55-PAC-750W , VID: V02 , SN: ART182126V2
NAME: "Module 3", DESCR: "O2 Daughter Card with L3 ASIC"
PID: N55-D160L3-V2 , VID: V01 , SN: FOC14952NU2
"""
我试图实现的是将这些部分的描述PID和序列放入一个类中
首先我想我把它们都放在一行上,然后把行分开,这样以NAME:和PID:开头的两行就在同一行上,一旦它们都在同一行上,我就可以从每一行获取数据
我迄今为止的最新尝试:
data = ''.join(sample.splitlines())
nd = re.split(r"(\NAME:)", data)
这将名称放在它自己的行上,其余的行放在另一行上,这一行很接近,但是我需要删除所有只有name:on的行才能进行迭代
data = ''.join(sample.splitlines())
nd = re.split(r"(SN:\s[\w\-]+)", data)
这是混乱的,之前的尝试更接近
有人知道我如何将数据的每一部分放到一行上,或者有更好的方法吗
感谢以下内容:
import re
data = """
NAME: "Chassis", DESCR: "Nexus5548 Chassis"
PID: N5K-C5548UP , VID: V01 , SN: SSI1F8A204LK
NAME: "Module 1", DESCR: "O2 32X10GE/Modular Universal Platform Supervisor"
PID: N5K-C5548UP , VID: V01 , SN: FOC1FS7Q2P
NAME: "Module 2", DESCR: "O2 16X10GE Ethernet Module"
PID: N55-M16P , VID: V01 , SN: FOC15840LYH
NAME: "Fan 1", DESCR: "Chassis fan module"
PID: N5548P-FAN , VID: N/A , SN: N/A
NAME: "Fan 2", DESCR: "Chassis fan module"
PID: N5548P-FAN , VID: N/A , SN: N/A
NAME: "Power supply 1", DESCR: "AC power supply"
PID: N55-PAC-750W , VID: V02 , SN: ART18790WA
NAME: "Power supply 2", DESCR: "AC power supply"
PID: N55-PAC-750W , VID: V02 , SN: ART182126V2
NAME: "Module 3", DESCR: "O2 Daughter Card with L3 ASIC"
PID: N55-D160L3-V2 , VID: V01 , SN: FOC14952NU2
"""
matches = re.findall(r'NAME: \"(.*)\",\s*'
r'DESCR: \"(.*)\"\s*'
r'PID: (\S+)\s*,\s*'
r'VID: (\S+)\s*,\s*'
r'SN: (\S+)',
data,
re.MULTILINE)
print matches
将打印:
[('Chassis', 'Nexus5548 Chassis', 'N5K-C5548UP', 'V01', 'SSI1F8A204LK'), ('Module 1', 'O2 32X10GE/Modular Universal Platform Supervisor', 'N5K-C5548UP', 'V01', 'FOC1FS7Q2P'), ('Module 2', 'O2 16X10GE Ethernet Module', 'N55-M16P', 'V01', 'FOC15840LYH'), ('Fan 1', 'Chassis fan module', 'N5548P-FAN', 'N/A', 'N/A'), ('Fan 2', 'Chassis fan module', 'N5548P-FAN', 'N/A', 'N/A'), ('Power supply 1', 'AC power supply', 'N55-PAC-750W', 'V02', 'ART18790WA'), ('Power supply 2', 'AC power supply', 'N55-PAC-750W', 'V02', 'ART182126V2'), ('Module 3', 'O2 Daughter Card with L3 ASIC', 'N55-D160L3-V2', 'V01', 'FOC14952NU2')]
i、 e.每个条目的名称、描述、PID、VID、SN元组。如下:
import re
data = """
NAME: "Chassis", DESCR: "Nexus5548 Chassis"
PID: N5K-C5548UP , VID: V01 , SN: SSI1F8A204LK
NAME: "Module 1", DESCR: "O2 32X10GE/Modular Universal Platform Supervisor"
PID: N5K-C5548UP , VID: V01 , SN: FOC1FS7Q2P
NAME: "Module 2", DESCR: "O2 16X10GE Ethernet Module"
PID: N55-M16P , VID: V01 , SN: FOC15840LYH
NAME: "Fan 1", DESCR: "Chassis fan module"
PID: N5548P-FAN , VID: N/A , SN: N/A
NAME: "Fan 2", DESCR: "Chassis fan module"
PID: N5548P-FAN , VID: N/A , SN: N/A
NAME: "Power supply 1", DESCR: "AC power supply"
PID: N55-PAC-750W , VID: V02 , SN: ART18790WA
NAME: "Power supply 2", DESCR: "AC power supply"
PID: N55-PAC-750W , VID: V02 , SN: ART182126V2
NAME: "Module 3", DESCR: "O2 Daughter Card with L3 ASIC"
PID: N55-D160L3-V2 , VID: V01 , SN: FOC14952NU2
"""
matches = re.findall(r'NAME: \"(.*)\",\s*'
r'DESCR: \"(.*)\"\s*'
r'PID: (\S+)\s*,\s*'
r'VID: (\S+)\s*,\s*'
r'SN: (\S+)',
data,
re.MULTILINE)
print matches
将打印:
[('Chassis', 'Nexus5548 Chassis', 'N5K-C5548UP', 'V01', 'SSI1F8A204LK'), ('Module 1', 'O2 32X10GE/Modular Universal Platform Supervisor', 'N5K-C5548UP', 'V01', 'FOC1FS7Q2P'), ('Module 2', 'O2 16X10GE Ethernet Module', 'N55-M16P', 'V01', 'FOC15840LYH'), ('Fan 1', 'Chassis fan module', 'N5548P-FAN', 'N/A', 'N/A'), ('Fan 2', 'Chassis fan module', 'N5548P-FAN', 'N/A', 'N/A'), ('Power supply 1', 'AC power supply', 'N55-PAC-750W', 'V02', 'ART18790WA'), ('Power supply 2', 'AC power supply', 'N55-PAC-750W', 'V02', 'ART182126V2'), ('Module 3', 'O2 Daughter Card with L3 ASIC', 'N55-D160L3-V2', 'V01', 'FOC14952NU2')]
i、 e.每个条目的名称、描述、PID、VID、SN的元组。使用python split()函数。它将创建一个数组,包含由空格分隔的字符串的每个部分。然后您可以通过split(“/n”)对其进行迭代,这将通过换行符分割字符串。代码:
for index,line in enumerate(data.split("/n")):
if (index - 2)%3 == 0:
PID = line.split()[1]
serial_number = line.split()[7]
# here add some code to save the PID and SN whereever you want...
上面的代码将在每一行和每三行(从第二行开始)上迭代,它将通过if(index-2)%3==0:
条件实现。然后它将用空格分割字符串,您可以通过索引找到所需的PID和序列
请注意比较行号的条件,因为我不确定索引-2是否准确。也许索引-1
将是正确的条件。
您必须自己进行调整:)使用python split()函数。它将创建一个数组,包含由空格分隔的字符串的每个部分。然后您可以通过split(“/n”)对其进行迭代,这将通过换行符分割字符串。代码:
for index,line in enumerate(data.split("/n")):
if (index - 2)%3 == 0:
PID = line.split()[1]
serial_number = line.split()[7]
# here add some code to save the PID and SN whereever you want...
上面的代码将在每一行和每三行(从第二行开始)上迭代,它将通过if(index-2)%3==0:
条件实现。然后它将用空格分割字符串,您可以通过索引找到所需的PID和序列
请注意比较行号的条件,因为我不确定索引-2是否准确。也许索引-1
将是正确的条件。
您必须自己进行调整:)您是否将整个文件读入单个变量?当我的ssh脚本运行命令从设备获取资源清册时,它不是一个文件,而是被放入变量中了,我认为您可以通过以下方式获得所有详细信息。您是否将整个文件读取到单个变量中?它不是一个文件,而是将其放入变量中当我的ssh脚本运行命令从设备获取资源清册时,我认为您可以通过以下方式获得所有详细信息。