2017-04-27 52 views
0

我是Python中OOPS的新手。我創建了以下輸入文件。我編寫了python代碼以從輸入文件獲取詳細信息到本地類變量。我需要幫助創建一個更好的方式來安排和訪問輸入文件。Python中的數據結構幫助

DETAILS INPUT FABRIC -A FABRIC -A FABRIC -A FABRIC-A  FABRIC -B FABRIC -B FABRIC -B FABRIC-B 
ARRAY_SERIAL # T663xt AB12343        
HOST_NAME aaaaa 10000090FA87EC7A 10000090FA87EC7B 10000090FA87EC7C 10000090FA87EC7C SEPERATION 10000091FA87EC7B 10000091FA87EC7C 10000091FA87EC7D 10000091FA87EC7D 
HOST_NAME bbbbb 10000091FA87ED8A 10000091FA87FC8B 10000091FA87EC8C 10000091FA87EC8D SEPERATION 10000092FA87ED8E 10000092FA87FC8F 10000092FA87EC8G 10000092FA87EC8H 
HOST_NAME ccccc 10000093FA87ED8D 10000093FA87FC8 10000093FA87EC8C 10000093FA87EC8C SEPERATION 10000093FA87ED8D 10000093FA87FC8D 10000093FA87EC8C 10000093FA87EC8C 
CLUSTER YES         
FAB_A_FA 1E:0 2F:0 3G:0        
FAB_B_FA 16E:0 15F:0 14G:0       

我在下一列我在一列中的值和其各自的價值。

我已創建,其具有它的類變量,以在第1列的所有元素狀陣列,主機(字典),集羣呼叫,fa_A(字典),fa_B(字典)。

我存儲他們的變量,這樣我可以訪問它們生成一些打印語句。

例如開關命令功能將產生主機

alicreate "aaaaa_hba1", "10000090FA87EC7A" 
alicreate "aaaaa_hba2", "10000090FA87EC7B" 
alicreate "aaaaa_hba3", "10000090FA87EC7C" 
zonecreate "aaaaa_hba1_T663xt_1E_0", "aaaaa_hba1;T663xt_1E_0" 

等我想知道什麼是做到這一點的最佳方式開關命令。這將更好地創造一流的主機和輸入文件實例主機的所有主機,並生成等。

請在下面找到我的代碼。

#!/usr/bin/python 
import os.path 
import fileinput 
import re 

#print "Hello World!!" 
class checkingInputFile(): 
    array = []  
    host = {} 
    cluster = 0 
    fabricAFas = {} 
    fabricBFas = {} 

    def __init__(self): 
     print "Initializing file class" 

    def checkFile (self, file): 
     self.file = file 
     #print ("I am in checkFile "+ file) 
     try : 
      if os.path.isfile (self.file) : 
       print ("File"+ self.file +" exists \n") 
      else: 
       print "file does not exists" 
     except : 
      print ("File " + self.file + "does not exists") 

    def parsingFile (self, file): 
     self.file = file 

     print ("I am in switch command function" + self.file) 
     for line in fileinput.input (self.file): 
      #print (line)  
      arrayTemp = re.search (r'^ARRAY_SERIAL #,(\w+),(\w+)?,(\w+)?(\w+)?,(\w+)?,.*', line, re.M|re.I) 
      if arrayTemp is not None : 
       #print ("array lenght " + str(len(arrayTemp.group()))) 
       count = 0 
       try: 
        while arrayTemp.group() is not None: 
         #print arrayTemp.group(count+1) 
         #print "count value is ", count 
         if arrayTemp.group(count+1) is not None : 
         # print "count value inside if loop ",arrayTemp.group(count+1) 
          checkingInputFile.array.append(arrayTemp.group(count+1)) 
          print " After appending ",checkingInputFile.array 
         count = count + 1 
        else: 
         print " END OF ARRAYS line \n" 
       except IndexError: 
        print " No More Array Values" 
      ### Creating host Dictionary 
      hostTemp = re.search (r'^HOST_NAME,(\w+)?,?(w+)?,?(\w+)?,?(\w+)?,?(\w+)?,?(\w+)?,?,(\w+),(w+)?,?(\w+)?,?(\w+)?,?(\w+)?,?(\w+)?,', line, re.M|re.I) 
      if hostTemp is not None: 
        #print "host values", hostTemp.group() 
        count = 0 
        try: 
         #while hostTemp.group() is not None: 
          #print hostTemp.group(count+1) 
          #print "count value is ", count 
          if hostTemp.group(count+1) is not None : 
          # print "count value inside if loop ",hostTemp.group(count+1) 
           temp = hostTemp.group().split(",") 
           del temp[0] 
           checkingInputFile.host [ hostTemp.group(count + 1)] = temp 
           print checkingInputFile.host[hostTemp.group(count + 1)] 
          #count = count + 1 
        except IndexError: 
         print " No More Host Values" 

      clusterTemp = re.search (r'^cluster,(\w+),?', line, re.M|re.I) 
      if clusterTemp is not None : 
        #print "host values", clusterTemp.group() 
        count = 0 
        try: 
         #while clusterTemp.group() is not None: 
          #print clusterTemp.group(count+1) 
          #print "count value is ", count 
          if clusterTemp.group(count+1) is not None : 
          # print "count value inside if loop ",clusterTemp.group(count+1) 
           temp = clusterTemp.group().split(",") 
           del temp[0] 
           checkingInputFile.cluster = clusterTemp.group (count + 1) 
           print checkingInputFile.cluster 
          #count = count + 1 
        except IndexError: 
         print " No More Cluster Values" 
      fabricATemp = re.search (r'^(FAB_A_FA),([\w:]+),?([\w:]+)?,?([\w:]+),?([\w:]+)?,?', line, re.M|re.I) 
      if fabricATemp is not None : 
        print fabricATemp.group() 
        count = 0 
        try: 
         #while fabricATemp.group() is not None: 
          #print fabricATemp.group(count+1) 
          #print "count value is ", count 
          if fabricATemp.group(count) is not None : 
          # print "count value inside if loop ",fabricATemp.group(count+1) 
           temp = fabricATemp.group().split(",") 
           del temp[0] 
           checkingInputFile.fabricAFas [ fabricATemp.group(count + 1)] = temp 
           print checkingInputFile.fabricAFas 
          #count = count + 1 
        except IndexError: 
         print " No More Cluster Values" 
      fabricBTemp = re.search (r'^(FAB_B_FA),([\w:]+),?([\w:]+)?,?([\w:]+),?([\w:]+)?,?', line, re.M|re.I) 
      if fabricBTemp is not None : 
        print fabricBTemp.group() 
        count = 0 
        try: 
         #while fabricBTemp.group() is not None: 
          #print fabricBTemp.group(count+1) 
          #print "count value is ", count 
          if fabricBTemp.group(count) is not None : 
          # print "count value inside if loop ",fabricBTemp.group(count+1) 
           temp = fabricBTemp.group().split(",") 
           del temp[0] 
           checkingInputFile.fabricBFas [ fabricBTemp.group(count + 1)] = temp 
           print checkingInputFile.fabricBFas 
          #count = count + 1 
        except IndexError: 
         print " No More Cluster Values" 
     fileinput.close 
class switchCommandGenerator(checkingInputFile) : 

    def __init__(self): 
     print " I am inside switchCommandGenerator Initilazation" 
    #def broacadeCommand (self,*kargs[]): 


def main(): 
    InputFile = "/home/pradeep/Documents/Scripts/input.csv" 
    F1 = checkingInputFile() 
    F1.checkFile(InputFile) 

    #SW = switchCommandGenerator() 
    F1.parsingFile (InputFile) 



if __name__ == "__main__": 
    main() 

回答

0

我假設no.of記錄在數以百萬計的數百年中並不龐大。 如何解析並保存內存中的規範化數據如下。 在實施期間,請致電相關項目瞭解詳情。

數據結構:

serials (list or set) 
host (dictionary) 
    { 
    name: "aaaa" 
    Fabric-A: [] (list or set) 
    Fabric-B: [] (list or set) 
    } 
cluster (bool) 
fab_A = (dictionary) 
fab_B = (dictionary) 

如果它不會幫助烏拉圭回合的解決方案,可以準確地eloborateü要建設什麼樣的。