使用另一个列表作为参考隔离并追加列表中的项目

问题描述 投票:0回答:1

我尽力弄清楚如何将一个列表中的项目附加到新列表中。列表中的数据实际上是来自ipconfig / all的信息。因为我想根据网络标题将各部分中的项目分开,所以我将标题添加到另一个列表中以用作参考。这是我的代码:

listofstates = []
allconnections = []
leftconnections = []
mainlist = []
commands = "ipconfig/all"
pipe = Popen(commands, shell=True, stdout=PIPE)
for line in pipe.stdout:
    listofstates.append(line.strip())
for items in listofstates:
    splittedvalues = str(items).split(':')
    if "b''" not in splittedvalues:
        splittedvalues = [s for s in splittedvalues if s]
        element = [splittedvalues[0].replace("b'", "").replace(".", "")] + splittedvalues[1:]
        cleanedelement = (re.split(r'\s{2,}',str(element[0])) + element[1:])
        cleanedelement = [s for s in cleanedelement if s]
        allconnections.append(cleanedelement)
        leftvalues = str(splittedvalues[0])
        if "." not in leftvalues:
            wordcount = len(re.findall(r'\w+', leftvalues))
            if wordcount > 2:
                newvalues = leftvalues.replace("b'", "").replace("'", "")
                leftconnections.append(newvalues)

print (allconnections)
print (leftconnections) 

所有连接]的输出::

[["Windows IP Configuration'"], ['Host Name', " Bla Bla Bla'"], ['Primary Dns Suffix', " vitrox.local'"], ['Node Type', " Hybrid'"], ['IP Routing Enabled', " No'"], ['WINS Proxy Enabled', " No'"], ['DNS Suffix Search List', " black sheep'"], ['Ethernet adapter Ethernet', "'"], ['Media State', " Media disconnected'"], ['Connection-specific DNS Suffix', "'"], ['Description', " Intel(R) Ethernet Connection I-LM'"], ['Physical Address', " 00-B5-00-1E-F4-5G'"], ['DHCP Enabled', " Yes'"], ['Autoconfiguration Enabled', " Yes'"], ['Ethernet adapter Local Area Network 5', "'"], ['Connection-specific DNS Suffix', "'"], ['Description', " VirtualBox Host-Only Ethernet Adapter'"], ['Physical Address', " 0A-00-50-00-11-0B'"], ['DHCP Enabled', " No'"], ['Autoconfiguration Enabled', " Yes'"], ['Link-local IPv6 Address', ' fe69', 'aa2b', '4b5d', '2345', "5f07%08(Preferred)'"], ['IPv4 Address', " 10.0.0.05(Preferred)'"], ['Subnet Mask', " 255.255.255.0'"], ['Default Gateway', "'"], ['DHCPv6 IAID', " 539312188'"], ['DHCPv6 Client DUID', " 00-04-11-01-25-75-14-A4-54-B1-03-1E-F4-5E'"], ['DNS Servers', ' fec0', '0', '0', 'ffff', "1%1'"], ['fec0', '0', '0', 'ffff', "2%1'"], ['fec0', '0', '0', 'ffff', "3%1'"], ['NetBIOS over Tcpip', " Enabled'"]..............]

以上基本上是我要从中提取数据的列表。

leftconnections]的输出::

['Windows IP Configuration', 'Ethernet adapter Ethernet', 'Ethernet adapter Local Area Network 5', 'Wireless LAN adapter Local Area Connection* 3', 'Wireless LAN adapter Local Area Connection* 12', 'Wireless LAN adapter Wi-Fi', 'Ethernet adapter Bluetooth Network Connection']

这里是用作参考

的列表。

Ultimately,我想通过在leftconnections中的标题将所有连接中的数据分开来获得这样的输出。

[[["Windows IP Configuration'"], ['Host Name', " Bla Bla Bla'"], ['Primary Dns Suffix', " vitrox.local'"], ['Node Type', " Hybrid'"], ['IP Routing Enabled', " No'"], ['WINS Proxy Enabled', " No'"], ['DNS Suffix Search List', " black sheep'"]],[['Ethernet adapter Ethernet', "'"], ['Media State', " Media disconnected'"], ['Connection-specific DNS Suffix', "'"], ['Description', " Intel(R) Ethernet Connection I-LM'"], ['Physical Address', " 00-B5-00-1E-F4-5G'"], ['DHCP Enabled', " Yes'"], ['Autoconfiguration Enabled', " Yes'"], ['Ethernet adapter Local Area Network 5', "'"], ['Connection-specific DNS Suffix', "'"], ['Description', " VirtualBox Host-Only Ethernet Adapter'"], ['Physical Address', " 0A-00-50-00-11-0B'"], ['DHCP Enabled', " No'"], ['Autoconfiguration Enabled', " Yes'"], ['Link-local IPv6 Address', ' fe69', 'aa2b', '4b5d', '2345', "5f07%08(Preferred)'"], ['IPv4 Address', " 10.0.0.05(Preferred)'"], ['Subnet Mask', " 255.255.255.0'"], ['Default Gateway', "'"], ['DHCPv6 IAID', " 539312188'"], ['DHCPv6 Client DUID', " 00-04-11-01-25-75-14-A4-54-B1-03-1E-F4-5E'"], ['DNS Servers', ' fec0', '0', '0', 'ffff', "1%1'"], ['fec0', '0', '0', 'ffff', "2%1'"], ['fec0', '0', '0', 'ffff', "3%1'"], ['NetBIOS over Tcpip', " Enabled'"]],[[...],[...],[...],[[...],[...]]]

我能想到的是使它成为for循环(而不是工作代码):

for connection in leftconnections:
   if (*connection is the first*)
       mainlist.append(leftconnections) *until second connection is found*
代码的

主要用途

只是通过网络分隔ipconfig / all中的所有详细信息。因此,我实际上对其他方法持开放态度,因为我知道我的代码现在有点混乱。

非常感谢您愿意帮助我。

我尽力弄清楚如何将一个列表中的项目附加到新列表中。列表中的数据实际上是来自ipconfig / all的信息。因为我想将各部分中的项目分开...

python list append text-processing
1个回答
0
投票

在您发布的代码中,您正在b'徘徊,它位于stdout行的representation

的开头。在您当前的代码中,stdout被指定为bytes。要使其成为字符串,请调用其decode()方法,或者通过使用str参数调用Popen从一开始就将其作为text=True

该代码的主要目的只是通过网络分隔ipconfig / all中的所有详细信息。因此,我实际上对其他方法持开放态度,因为我知道我的代码现在有点混乱。

© www.soinside.com 2019 - 2024. All rights reserved.