如何将JSON文件作为单独的字符串读入列表而不是作为一个大列表

时间:2016-08-07 00:09:08

标签: python json twitter

我正在尝试读取看起来像这样的JSON文件。它们是推文的时间戳。当我用我的代码读入文件时,它是一个大字符串。有没有办法让他们分开。当我使用str.split()时,它会分割所有内容。是否有我可以加载或取出它来制作这个更容易的

if sum(1 for item in somelist if item) != 1:
    raise ValueError("or whatever...")

以下是我在

中阅读的内容
"Sat Aug 06 23:54:24 +0000 2016""Sat Aug 06 23:54:24 +0000 2016""Sat Aug 06 23:54:24 +0000 2016""Sat Aug 06 23:54:24 +0000 2016"

以下是我目前正试图将其解决的问题

q = 'Trump'

twitter_stream = twitter.TwitterStream(auth=twitter_api.auth)

stream = twitter_stream.statuses.filter(track=q)

for tweet in stream:
    print (type(tweet))
    tweet = tweet['created_at']
    with open('dates.json', 'a') as outfile:
         json.dump(tweet, outfile, indent=4)

我希望它们按日期分隔,以便我可以将它们转换为制作时间序列图

编辑/更新:现在我有了这个,但是流不断地收集推文而不停止。如何让它停止收集推文并将JSON数据转储到文件中。手动或自动

with open('dates.json', 'rb') as f:
    data = f.readlines()

1 个答案:

答案 0 :(得分:1)

将推文日期收集到列表中,然后转储一次

dates = [tweet['created_at'] for tweet in stream]
with open('dates.json', 'a') as outfile:
     json.dump(dates, outfile, indent=4)
  

有了这个,我如何让它停止流式传输并转储到文件中。之前由于它是通过推文倾销推文,我只是重新启动shell。

我认为您应该将理解扩展到常规循环并将其放入try/finally

dates = []
try:
    for tweet in stream:
       dates.append(tweet['created_at'])
finally:
    with open('dates.json', 'a') as outfile:
         json.dump(dates, outfile, indent=4)