2011-09-06 24 views
2

我正在構建一個Python腳本來在我們的內部系統上執行網絡清單。每個系統最多有五個羣集,我正在尋找一種方法來調整列表,以便將每個羣集全部放入一個羣集中。下面是他們的存儲系統上的方式:重新設置設置長度的列表

集羣中的一個
主系統
節點的一個
XXXX(節點IP)
節點有兩個
XXXX(節點IP)
羣二
主系統
節點一
xxxx(節點IP)
節點二
XXXX(節點IP)

我需要讓他們調整到這個樣子:

集羣中的一個,主系統,節點一,XXXX(節點IP),節點有兩個,XXXX (節點IP)
羣二,主系統,節點一,XXXX(節點IP),節點二,XXXX(節點IP)

這是我現在使用了一些非常草率的代碼,但我想知道是否更有效率nt的方式來做到這一點:

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,所以它可能只是一個簡單的調整。提前致謝。

+1

您應該首先重構您的代碼以簡化'Temp'的計算。這些行中有足夠的複合概念來將它們概括爲更容易閱讀的行。考慮使用這樣的東西:'index =(count - 1)* 6; 「,」。join(NetworkTable [index:index + 6])' – Lynch

回答

2

首先看看:How do you split a list into evenly sized chunks?

使用其中一個答案:

>>> 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'] 
1

我會理線基礎上,他們首先,這個名字的線條,因爲它似乎是一個「集羣」規定了一套新的數據:

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]) 
+0

謝謝你的回答。不幸的是,它並不總是被稱爲「集羣」。它基於系統如何配置,但大約80%的DO是以「集羣」開始的。無論如何,它總是六個一組。 – Taylor