我试图在python中找到一个更大的字符串中的子字符串。我试图找到字符串“每秒请求数:”后找到的文本。看来我对python字符串和python的了解一般都缺乏。
我的错误出现在第3行代码minusStuffBeforeReqPer = output[reqPerIndx[0], len(output)]
上,我得到的错误是,在reqPerIndx上没有[0]
我正在尝试访问元组,但是我得到了错误{I} {1}}。我试图在int object has no attribute __getitem__
字符串中找到reqPerStr的起始索引。
代码
output
答案 0 :(得分:4)
您必须使用output[begin:end]
,而不是output[begin, end]
(这就是切片普通字符串/列表/等的工作原理)。所以:
minusStuffBeforeReqPer = output[reqPerIndx:len(output)]
然而,这是多余的。所以你应该这样做:
minusStuffBeforeReqPer = output[reqPerIndx:]
通过省略切片的end
部分,切片将一直到output
的末尾。
在没有[0]
的情况下访问元组时出现错误,因为您已经传递了一个元组(即(reqPerIndx, len(output))
到切片[...]
),并且您收到有关{{1}的错误没有int
,因为当你写__getitem__
时,你试图获得reqPerIndx[0]
的{{1}}元素,这是一个整数,但当然没有诸如“整数的第0个元素”之类的东西,因为整数没有元素。
正如@AshwiniChaudhary在评论中指出的那样,如果找不到子字符串,0
将返回reqPerIndx
。如果你确定你所寻找的东西总是会在str.find
的某个地方找到,我想你不需要处理-1
的情况,但这可能是个好主意。所以无论如何。
output
你可能有更好的运气与正则表达式。我不知道-1
的样子,所以我猜对了 - 你应该调整它以匹配reqPerIndx = output.find(reqPerStr)
if reqPerIndx != -1:
minusStuffBeforeReqPer = ...
# etc
else:
# handle this case separately
中的任何内容。
output
答案 1 :(得分:0)
这两行有错误:
minusStuffBeforeReqPer = output[reqPerIndx[0], len(output)]
instanceTestObj.reqPerSec = minusStuffBeforeReqPer[semiColIndx+1, eolIndx]
您必须使用:
来创建范围。 start:end
。
您可以省略最后一个参数以结束或省略第一个参数以省略开头。参数也可以是负数。由于find可能会返回-1
,您将不得不以不同的方式处理它,因为如果找不到该字符串,您将最终得到:
minusStuffBeforeReqPer = output[-1:]
这是字符串中的最后一个字符。
您应该拥有如下代码:
#output contains the string reqPerStr.
reqPerStr = "Requests per second:"
reqPerIndx = output.find(reqPerStr)
if reqPerIndx != -1:
minusStuffBeforeReqPer = output[reqPerIndx[0]:]
eolIndx = minusStuffBeforeReqPer.find("\n")
semiColIndx = minusStuffBeforeReqPer.find(":")
if eolIndx > semiColIndx >= 0:
instanceTestObj.reqPerSec = minusStuffBeforeReqPer[semiColIndx+1:eolIndx]
这很好,但你绝对应该用正则表达式更改代码。据我了解,您确实希望匹配以reqPerStr
开头并以\n
结尾的字符串,并获取介于:
和\n
之间的所有内容。
你可以用这样的模式做到这一点:
"Requests per second:(.*)\n"
你最终会得到:
import re
reqPerIndx = output.find(reqPerStr)
match = re.match("Requests per second:(.*)\n", output)
if match:
instanceTestObj.reqPerSec = match.group(1)
如果你想找到所有的比赛,你可以这样做:
for match in re.finditer("Requests per second:(.*)", output)
instanceTestObj.reqPerSec = match.group(1)