2016-05-13 63 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 

这不是直接对您得到的错误,但可能是在别的地方在你的代码的原因。

相关问题