我有数百行数据,如下所示:
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
我想得到一个逗号分隔的值字符串,它们位于字符串“Patch:”之后,即“148077-01,148407-01,148683-01 ......”
我写了一段代码,但是我收到错误“'list'对象没有属性'strip'”
以下是我的代码,请帮助:
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
答案 0 :(得分:0)
您的代码存在以下问题:
PatchId
已初始化为None
,但从未使用过output
不必要地初始化为None
finalOutput
实际上不是字符串,它是一个对象,可能是None
'outString'
附加到最终输出,并且附加发生在for循环之外考虑到这一点,这里是修复这些问题的代码。请注意补丁ID是如何从matched
中提取的,这是正则表达式匹配的结果。
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
答案 1 :(得分:0)
我可以在您的代码中看到一些错误。
您将字符串'outString'
附加到列表finalOutput
而不是outString
的值。
re.match()
返回的值不是字符串,而是Match
对象。要让您的正则表达式捕获该组,您应该致电outString.group(1)
(group(0)
保留原始字符串)。
你的正则表达式有两个冒号。
finalOutput.append()
的缩进似乎有误。您只需在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
这不会对您收到的错误负直接的责任,但可能是您代码中其他地方的错误原因。