如何从长字符串中获取单个项目?

时间:2015-02-12 12:34:53

标签: python

我有一个非常字符串作为函数的输出,如下所示:

tmp = <"last seen":1568,"reviews [{"id":15869,"author":"abnbvg","changes":........>

我如何从中获取"id":15869

3 个答案:

答案 0 :(得分:0)

字符串内容看起来像JSON,因此要么使用json模块,要么使用正则表达式来提取所需的特定字符串。

答案 1 :(得分:0)

数据看起来像JSON字符串。使用:

try:
    import json
except ImportError:
    import simplejson as json

tmp = '"last seen":1568,"reviews":[{"id":15869,"author":"abnbvg"}]'
data = json.loads('{{{}}}'.format(tmp))

>>> print data
{u'reviews': [{u'id': 15869, u'author': u'abnbvg'}], u'last seen': 1568}
>>> print data['reviews'][0]['id']
15869

请注意,我将字符串包裹在{}中以制作字典。如果实际的JSON字符串已经用大括号封装,则可能不必这样做。

答案 2 :(得分:0)

如果id是字符串中唯一需要的东西,它总是类似于{"id":15869,"author":"abnbvg"...,那么你可以使用sinple string split而不是json转换。

tmp = '"last seen":1568,"reviews" : [{"id":15869,"author":"abnbvg","changes":........'
tmp1 = tmp.split('"id":', 1)[1]
id = tmp1.split(",", 1)[0]

请注意,tmp1行可能会引发IndexError,以防在字符串中找不到"id"项。您可以使用-1代替1来执行辅助步骤。但通过这种方式,您可以报告找不到"id"

try:
    tmp1 = tmp.split('"id":', 1)[1]
    id = tmp1.split(",", 1)[0]
except IndexError:
    print "id key is not present in the json"
    id = None

如果确实需要json字符串中的更多变量,请使用mhawke将json转换为字典并获取值的解决方案。您可以使用ast.literal_eval

from ast import literal_eval
tmp = '"last seen":1568,"reviews" : [{"id":15869,"author":"abnbvg","changes":........'
tmp_dict = literal_eval("""{%s}"""%(tmp))
print tmp_dict["reviews"][0]["id"]

在第二种情况下,如果您需要收集列表中的所有"id"键,这将有所帮助:

id_list =[]
for id_dict in tmp_dict["reviews"]:
    id_list.append(id_dict["id"])
print id_list