使用python和twitter api获取tweet对象。

我有一个带有推文的文件(tweetfile =我的计算机上的.txt文件),我试图遍历对象以获取文本。我使用tweetObj.keys()检查了twitter对象,以查看 key 和“文本”是否存在;但是,当我尝试使用tweetObj ['text']获取单个文本时,出现了KeyError:'text'

代码:

for line in tweetfile:
    tweetObj = json.loads(line)
    keys =  tweetObj.keys()
    print keys
    tweet = tweetObj['text']
    print tweet

下面是输出:
[u'contributors', u'truncated', u'text', u'in_reply_to_status_id', u'id', u'favorite_count', u'source', u'retweeted', u'coordinates', u'entities', u'in_reply_to_screen_name', u'id_str', u'retweet_count', u'in_reply_to_user_id', u'favorited', u'user', u'geo', u'in_reply_to_user_id_str', u'possibly_sensitive', u'lang', u'created_at', u'filter_level', u'in_reply_to_status_id_str', u'place']
@awe5sauce my dad was like "so u wanna be in a relationship with a 'big dumb idiot'" nd i was like yah shes the bae u feel lmao
[u'delete']
Traceback (most recent call last):
  File "C:\apps\droid\a1\tweets.py", line 34, in <module>
main()
  File "C:\apps\droid\a1\tweets.py", line 28, in main
    tweet = tweetObj['text']
KeyError: 'text'

我不确定该如何处理,因为它看起来像是打印一条推文。问题是,为什么会在键存在的地方出现这种情况,而该键似乎会返回一个值,但并非针对所有实例,并且我该如何将其更正为可以使用该键访问所有行的值的地方?

最佳答案

在循环中创建了2个字典,每行一个。第一个具有text,第二个仅具有'delete' key 。它没有'text' key 。因此,错误消息。

更改为:

for line in tweetfile:
    tweetObj = json.loads(line)
    keys =  tweetObj.keys()
    print keys
    if 'text' in tweetObj:
        print tweetObj['text']
    else:
        print 'This does not have a text entry'

请注意,如果您仅对包含text的行感兴趣,则可以使用
[ json.loads(l)['text'] for l in tweetfile if 'text' in json.loads(l) ]
或者
'\n'.join([ json.loads(l)['text'] for l in tweetfile if 'text' in json.loads(l) ])
甚至更好
[ json.loads(l).get('text') for l in tweetfile]

关于python - key 存在时的KeyError,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24816114/

10-12 17:02
查看更多