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脚本运行命令从设备获取资源清册时,我认为您可以通过以下方式获得所有详细信息。