在文本文件中搜索字符串并捕获n个字符

时间:2015-04-21 20:07:10

标签: python curl

我正在使用subprocess.Popenstdout来编写来自Backendless(BaaS)的curl的输出。

写入输出文件的是一长串单行数据,以逗号分隔。这是其中的一小部分。

{"APIEndpoint":"asdfaasdfa","created":1429550024000,"updated":null,"objectId":"EE51537D-A9AC-721C-FF33-F4B258931E00"...}

此输出文件所需的值是“objectID”后面的37个字符的字符串:“。我​​读过很多类似的问题,但是找不到这个特定问题的解决方案。我试过了类似的东西:

objectid = 37
searchfile open('backendless.txt', 'r')
for line in searchfile:
    if "\"objectId\":\"" in line:
        print(right[:objectidd])

什么都不返回。如果我错误地使用line,请更正我。我对此很新。另外,有没有办法实现相同的结果而不先将其保存到文本文件中,而是使用curlPIPE执行communicate

我正在使用Python 3.4。谢谢。

修改/溶液

from subprocess import *
baascurl = Popen(['curl', '-H', appid, '-H', secretkey, '-H', apptype, '-H', contenttype, '-X', 'GET', '-v', 'https://api.backendless.com/v1/data/Latency/last'], stdout=PIPE).communicate()[0]
objidbytes = baascurl.decode(encoding='utf-8')
objid = json.loads(objidbytes)["objectId"]

1 个答案:

答案 0 :(得分:2)

您的数据看起来非常像JSON,所以也许您可以使用Python的json模块:

import json
objid = json.loads(datastring)["objectId"]

如果您希望保持文本级别,则此作业的正确工具是正则表达式。查看Python的re模块。

import re
m = re.search(r'"objectId":"([^"]+)"', datastring, re.IGNORECASE)
if m:
    objid = m.group(1)