【问题标题】:How to open large twitter file (30GB+) in Python?如何在 Python 中打开大型 twitter 文件(30GB+)?
【发布时间】:2018-12-05 17:26:36
【问题描述】:

我想知道在 python 3 上打开使用 tweepy 流式传输的大型 Twitter 文件的正确脚本是什么。我已将以下文件用于较小的文件,但现在我的数据收集超过 30GB+,我遇到了内存错误:

with open('data.txt') as f:
    tweetStream = f.read().splitlines()

tweet = json.loads(tweetStream[0])
print(tweet['text'])
print(tweet['user']['screen_name'])

到目前为止,我一直无法在网上找到我需要的东西,因此非常感谢任何帮助。

【问题讨论】:

  • 您的系统是否有足够的内存来一次将整个文件存储在内存中?如果没有,您需要分段读取和解析数据,并可能将中介存储到数据库中。
  • 嘿斯蒂芬,感谢您的评论。不,我只有 16GB 的 RAM。人们通常如何分析超过 1TB 的长达一年的 Twitter 数据?你能建议一种方法来读取和解析部分数据吗?
  • 见下面@RobBricheno 的回答。他或多或少总结了我会怎么做。

标签: python json twitter


【解决方案1】:

不要尝试创建包含整个文件的对象。相反,由于每一行都包含一条推文,因此一次处理一行文件:

with open('data.txt') as f:
    for line in f:
        tweet = json.loads(line)
        print(tweet['text'])
        print(tweet['user']['screen_name'])

也许将相关的推文存储到另一个文件或数据库中,或者生成一个统计摘要。例如:

total = 0
about_badgers = 0
with open('data.txt') as f:
    for line in f:
        tweet = json.loads(line)
        total +=1
        if "badger" in tweet['text'].lower():
            about_badgers += 1

print("Of " + str(total) +", " + str(about_badgers) +" were about badgers.")

捕获与无法解析的行相关的错误,如下所示:

with open('data.txt') as f:
    for line in f:
        try:
            tweet = json.loads(line)
            print(tweet['text'])
         except json.decoder.JSONDecodeError:
            # Do something useful, like write the failing line to an error log
            pass

        print(tweet['user']['screen_name'])

【讨论】:

  • 非常感谢 Rob,我认为这应该可以工作,但现在我遇到了另一个问题:从 None JSONDecodeError: Expecting value 引发 JSONDecodeError("Expecting value", s, err.value) 知道为什么这是怎么回事?
  • @saladin1991 也许文件有一些空行?无论如何,某些行无法解码。我已经添加了一个示例,说明您可以如何处理。
  • Rob 和 Stephen,真的非常感谢。它最终工作了。我真的很感激!
猜你喜欢
  • 2023-03-14
  • 2015-09-07
  • 2010-12-24
  • 2016-08-31
  • 1970-01-01
  • 2019-12-17
  • 1970-01-01
  • 2020-12-09
  • 2020-10-09
相关资源
最近更新 更多