用集合长度重建列表



我正在构建一个Python脚本,在我们的内部系统上做一个网络库存。每个系统最多有五个集群,我正在寻找一种方法来调整列表,将它们全部放入每个集群的一行中。下面是它们在系统中的存储方式:

集群一个
主系统
节点一个
x.x.x.x(节点IP)
节点的两个
x.x.x.x(节点IP)
集群两个
主系统
节点一个
x.x.x.x(节点IP)
节点的两个
x.x.x.x(节点IP)

我需要把它们调整成这样:

Cluster One,Primary System,Node One,x.x.x. x。x.x.x. x(节点IP),节点2,x.x.x. x。x(节点IP)
集群二,主系统,节点一,x.x.x。x.x.x. x(节点IP),节点2,x.x.x. x。x(节点IP)

这是我现在正在使用的一些非常草率的代码,但我想知道是否有更有效的方法来做到这一点:

NetworkTableCount = len(NetworkTable) / 6 + 1
    count = 1
    while count < NetworkTableCount:
            if count == 1:
                    Temp = (NetworkTable[0]+","+NetworkTable[1]+","+NetworkTable[2]+","+NetworkTable[3]+","+NetworkTable[4]+","+NetworkTable[5]+"n")
            elif count == 2:
                    Temp = (NetworkTable[6]+","+NetworkTable[7]+","+NetworkTable[8]+","+NetworkTable[9]+","+NetworkTable[10]+","+NetworkTable[11]+"n")
            elif count == 3:
                    Temp = (NetworkTable[12]+","+NetworkTable[13]+","+NetworkTable[14]+","+NetworkTable[15]+","+NetworkTable[16]+","+NetworkTable[17]+"n")
            elif count == 4:
                    Temp = (NetworkTable[18]+","+NetworkTable[19]+","+NetworkTable[20]+","+NetworkTable[21]+","+NetworkTable[22]+","+NetworkTable[23]+"n")
            elif count == 5:
                    Temp = (NetworkTable[24]+","+NetworkTable[25]+","+NetworkTable[26]+","+NetworkTable[27]+","+NetworkTable[28]+","+NetworkTable[29]+"n")
            NetworkTopology.write(Temp)
            count = count + 1

我自学Python,所以这可能只是一个简单的调整。

第一眼:如何将列表分成大小相等的块?

使用其中一个答案:

>>> import itertools
>>> NetworkTable
['Cluster One', 'Primary System', 'Node One', 'x.x.x.x (Node IP)', 'Node two', 'x.x.x.x (Node IP)', 'Cluster Two', 'Primary System', 'Node One', 'x.x.x.x (Node IP)', 'Node two', 'x.x.x.x (Node IP)']
>>> l = [NetworkTable[i:i+6] for i in range(0, len(NetworkTable), 6)]
>>> l
[['Cluster One', 'Primary System', 'Node One', 'x.x.x.x (Node IP)', 'Node two', 'x.x.x.x (Node IP)'], ['Cluster Two', 'Primary System', 'Node One', 'x.x.x.x (Node IP)', 'Node two', 'x.x.x.x (Node IP)']]
>>> #Now it's easy. Do what you want with l.
>>> [", ".join(i) + "n" for i in l]
['Cluster One, Primary System, Node One, x.x.x.x (Node IP), Node two, x.x.x.x (Node IP)n', 'Cluster Two, Primary System, Node One, x.x.x.x (Node IP), Node two, x.x.x.x (Node IP)n']

我将根据它们开头的名称处理这些行,因为看起来'Cluster'指定了一组新的数据:

file = open('my_file')
clusters=[]
line = file.readline()
while line.strip().startswith("Cluster"):
        cluster = []
        cluster.append(line.strip())
        line = file.readline()
        cluster.append(line.strip())
        line = file.readline()
        while line.strip().startswith("Node"):
                node = []
                node.append(line.strip())
                line = file.readline()
                node.append(line.strip())
                cluster.append(node)
                line = file.readline()
        clusters.append(cluster)
# now you have a list of clusters, where nodes are in a list too
print(clusters[0])
print(clusters[1])

最新更新