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

2024-10-01 09:29:07 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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


Tags: 函数字符串idtmpauthorlastreviewsseen
3条回答

数据看起来像一个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字符串已经用大括号封装,那么您可能不必这样做

如果id是字符串中唯一需要的东西,并且它总是类似于{"id":15869,"author":"abnbvg"...,那么您可以使用单字符串拆分而不是json转换

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

请注意,tmp1行可能会在字符串中找不到"id"键的情况下引发IndexError。你可以用-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转换为dictionary并获取值。你可以使用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

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

相关问题 更多 >