2016-05-13 68 views
0

我有數據的行百這樣的:名單'對象有沒有屬性「帶」

Patch: 148077-01 Obsoletes: Requires: 120011-14 Incompatibles: Packages: SUNWcsr 
Patch: 148407-01 Obsoletes: Requires: 144500-19 Incompatibles: Packages: SUNWcsr, SUNWcsu 
Patch: 148683-01 Obsoletes: Requires: 120011-14 Incompatibles: Packages: SUNWcsr 
Patch: 148948-01 Obsoletes: Requires: 118833-36, 127127-11 Incompatibles: Packages: SUNWcsr 
Patch: 121061-01 Obsoletes: Requires: Incompatibles: Packages: SUNWcsr 
Patch: 150435-01 Obsoletes: Requires: Incompatibles: Packages: SUNWcsr 
Patch: 149171-02 Obsoletes: 148407-01 Requires: 118833-36, 137137-09, 144500-19 

我希望得到一個逗號分隔值的字符串,它是後弦「修補」,即「 148077-01,148407-01,148683-01 ......」

我已經寫了代碼,但是我得到錯誤‘‘清單’對象有沒有屬性‘條’’

下面是我的代碼,請幫忙:

def getPatchId(self): 
    PatchId = None 

    output = None 
    finalOutput = [] 
    output = self.client.execCmd('showrev -p | grep SUNWcsr') 

    if output: 
     for line in output.split('\n'): 
      outString = re.match(r".*?Patch:\:\s+([^\s]+)", line) 

     finalOutput.append('outString') 

     return finalOutput 
+4

在發佈的代碼中沒有對'strip()'的調用。 –

+1

我認爲他的意思是'分裂'? –

+0

'output'是多行字符串還是單行字符串列表? –

回答

0

有你的代碼的幾個問題:

  • 正則表達式是錯誤的(冒號指定了兩次,例如)
  • PatchId初始化爲None,但從未使用
  • output不必要初始化爲None
  • finalOutput實際上並不是一個字符串,它是一個對象,它可能是None
  • 你在附近nding字符串文字'outString'到最終輸出和追加發生的外部for循環

考慮到這一點,這裏是我固定這些問題的代碼。注意如何從matched中提取修補程序ID,這是正則表達式匹配的結果。

def getPatchId(self): 
    patch_ids = [] 
    for line in output.split('\n'): 
     matched = re.match(r"Patch:\s+([^\s]+)", line) 
     if matched is not None: 
      patch_ids.append(matched.groups()[0]) 

    return patch_ids 
0

我可以在代碼中看到一些錯誤。

  • 你將字符串'outString'到列表finalOutput代替的outString值。

  • re.match()返回的值不是字符串,而是Match對象。要獲得由您的正則表達式捕獲的組,應該調用outString.group(1)group(0)保留原始字符串)。

  • 你的正則表達式模式有兩個冒號。

  • finalOutput.append()的縮進看起來不對。 Your're僅添加outString的值,因爲它是在for循環的最後一次迭代中。

我相信你的代碼看起來應該像下面這樣:

def getPatchId(): 
    output = None 
    finalOutput = [] 
    output = self.client.execCmd('showrev -p | grep SUNWcsr') 

    if output: 
     for line in output.split('\n'): 
      outString = re.match(r".*?Patch\:\s+([^\s]+)", line) 

      finalOutput.append(outString.group(1)) 

     return finalOutput 

這不是直接對您得到的錯誤,但可能是在別的地方在你的代碼的原因。

相關問題