Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 尝试访问Tweepy响应中的值时出现KeyError_Python_Json_Parsing_Twitter_Tweepy - Fatal编程技术网

Python 尝试访问Tweepy响应中的值时出现KeyError

Python 尝试访问Tweepy响应中的值时出现KeyError,python,json,parsing,twitter,tweepy,Python,Json,Parsing,Twitter,Tweepy,我是解析json文件的新手,尽管尝试了几个小时,但还是找不到访问json对象中所需值的方法。这是我的密码: # Access a tweet id and get the tweet info, then save to a txt file tweet_id = df_tae['tweet_id'][0] tweet = api.get_status(tweet_id, tweet_mode='extended') with open('tweet_json_test.txt', "a") a

我是解析json文件的新手,尽管尝试了几个小时,但还是找不到访问json对象中所需值的方法。这是我的密码:

# Access a tweet id and get the tweet info, then save to a txt file
tweet_id = df_tae['tweet_id'][0]
tweet = api.get_status(tweet_id, tweet_mode='extended')
with open('tweet_json_test.txt', "a") as outfile:
   json.dump(tweet._json, outfile)

# Later on, open the file and try to extract the 'media_url' address
with open('tweet_json_test.txt') as json_file:
    image = json.load(json_file)
我复制了文章底部的“图像”摘录

然后当我打电话时:

image['id']
image['media']
我得到:892420643555336193,这很好:-)

但当我打电话时:

image['id']
image['media']
我得到以下错误

KeyError                                  Traceback (most recent call last)
<ipython-input-849-665e447555a9> in <module>
----> 1 image['media']

KeyError: 'media'

看起来像它的内部
实体

image['entities']['media']

看起来像它的内部
实体

image['entities']['media']
我得到以下错误

KeyError                                  Traceback (most recent call last)
<ipython-input-849-665e447555a9> in <module>
----> 1 image['media']

KeyError: 'media'
对,因为
media
不是从JSON加载的dict的键之一;它是
实体
键下子目录的一个键。所以你需要
图像['entities']['media']
。类似地,查看该dict并获取
media\u url
图像['entities']['media']['media\u url']

它只是一个dict。它是否来自JSON文件并不重要。数据是嵌套的,因此一次只能访问一个步骤

我得到以下错误

KeyError                                  Traceback (most recent call last)
<ipython-input-849-665e447555a9> in <module>
----> 1 image['media']

KeyError: 'media'
对,因为
media
不是从JSON加载的dict的键之一;它是
实体
键下子目录的一个键。所以你需要
图像['entities']['media']
。类似地,查看该dict并获取
media\u url
图像['entities']['media']['media\u url']


它只是一个dict。它是否来自JSON文件并不重要。数据是嵌套的,因此您可以一步一步地访问它。

媒体位于另一个字典中,
图像['entities']

通过查看字典的键,可能更容易阅读字典
图像的内容:

image.keys()
或者整本字典:

导入pprint
pprint.PrettyPrinter(深度=4).pprint(图像)
哪个输出

{'created_at': 'Tue Aug 01 16:23:56 +0000 2017',
 'display_text_range': [0, 85],
 'entities': {'hashtags': [],
              'media': [{'display_url': '.....',
                         'expanded_url': 'https://twitter.com/dog_rates/status/892420643555336193/photo/1',
                         'id': 892420639486877696,
                         'id_str': '892420639486877696',
                         'indices': [...],
                         'media_url': 'http://pbs.twimg.com/media/DGKD1-bXoAAIAUK.jpg',
                         'media_url_https': 'https://pbs.twimg.com/media/DGKD1-bXoAAIAUK.jpg',
                         'sizes': {...},
                         'type': 'photo',
                         'url': 'https......'}],
              'symbols': [],
              'urls': [],
              'user_mentions': []},
 'full_text': "This is Phineas. He's a mystical boy. Only ever appears in the "
              'hole of a donut. 13/10',
 'id': 892420643555336193,
 'id_str': '892420643555336193',
 'truncated': False}

媒体
位于另一个字典中,
图像['entities']

通过查看字典的键,可能更容易阅读字典
图像的内容:

image.keys()
或者整本字典:

导入pprint
pprint.PrettyPrinter(深度=4).pprint(图像)
哪个输出

{'created_at': 'Tue Aug 01 16:23:56 +0000 2017',
 'display_text_range': [0, 85],
 'entities': {'hashtags': [],
              'media': [{'display_url': '.....',
                         'expanded_url': 'https://twitter.com/dog_rates/status/892420643555336193/photo/1',
                         'id': 892420639486877696,
                         'id_str': '892420639486877696',
                         'indices': [...],
                         'media_url': 'http://pbs.twimg.com/media/DGKD1-bXoAAIAUK.jpg',
                         'media_url_https': 'https://pbs.twimg.com/media/DGKD1-bXoAAIAUK.jpg',
                         'sizes': {...},
                         'type': 'photo',
                         'url': 'https......'}],
              'symbols': [],
              'urls': [],
              'user_mentions': []},
 'full_text': "This is Phineas. He's a mystical boy. Only ever appears in the "
              'hole of a donut. 13/10',
 'id': 892420643555336193,
 'id_str': '892420643555336193',
 'truncated': False}

正如np8的回答中指出的,我发现在调试类似这样的东西时使用pretty print很有用。它是标准库/模块的一部分,因此不在导入/下载之外

简单地说

从pprint导入pprint
# ...
pprint(mydict)
#或
pprint(mylist)
它通常做得很好

你的代码 听起来你想从twitter的回复中提取出所有的
media\u url
s。 查看
图像的结构,我们可以看到

{'created_at':'2017年8月1日星期二16:23:56+0000',
“显示文本范围”:[0,85],
'entities':{'hashtags':[],
'媒体':[{'display_url':'…',
'扩展的url':'https://twitter.com/dog_rates/status/892420643555336193/photo/1',
“id”:892420639486877696,
“id_str”:“892420639486877696”,
“索引”:[…],
“媒体url”:”http://pbs.twimg.com/media/DGKD1-bXoAAIAUK.jpg',
“媒体url\uHTTPS”:https://pbs.twimg.com/media/DGKD1-bXoAAIAUK.jpg',
'大小':{…},
“类型”:“照片”,
'url':'https…'}],
“符号”:[],
“URL”:[],
“用户提到”:[]},
“全文”:“这是菲尼亚斯。他是一个神秘的男孩。只出现在电影中”
“甜甜圈的洞,13/10”,
“id”:892420643555336193,
"id_str":"89242064355533636193",
“截断”:False}
它是具有
实体
键的dict,其值为具有
媒体
键的dict,其值为具有
媒体url
键的dict列表。因此,要访问这些
媒体url
s,我们必须深入到结构中,将它们取出

访问一个:

first\u media\u url=image['entities']['media'][0]['media\u url']
将一条推文中的所有
媒体url
放入列表:

media\u url=[media['media\u url']用于图像中的媒体['entities']['media']]
(额外)从所有图像中获取所有
media\u url
s(假设图像在列表中):

所有\u媒体\u URL=[
媒体['media_url']
对于图像中的图像
对于图像['entities']['media']中的媒体
]
请记住,在使用tweepy之类的工具时,一定要检查文档,因为它们可能会很好地布局结构。此外,json模块成功加载的任何内容现在都只是一个普通的dict,您可以与之交互,没有什么特别之处


希望这有帮助

正如np8的回答所指出的,我发现在调试类似这样的东西时使用“漂亮打印”很有用。它是标准库/模块的一部分,因此不在导入/下载之外

简单地说

从pprint导入pprint
# ...
pprint(mydict)
#或
pprint(mylist)
它通常做得很好

你的代码 听起来你想从twitter的回复中提取出所有的
media\u url
s。 查看
图像的结构,我们可以看到

{'created_at':'2017年8月1日星期二16:23:56+0000',
“显示文本范围”:[0,85],
'entities':{'hashtags':[],
'媒体':[{'display_url':'…',
'扩展的url':'https://twitter.com/dog_rates/status/892420643555336193/photo/1',
“id”:892420639486877696,
“id_str”:“892420639486877696”,
“索引”:[…],
“媒体url”:”http://pbs.twimg.com/media/DGKD1-bXoAAIAUK.jpg',
“媒体url\uHTTPS”:https://pbs.twimg.com/media/DGKD1-bXoAAIAUK.jpg',