【问题标题】:Tweets streamed using tweepy, reading json file in python使用 tweepy 流式传输推文,在 python 中读取 json 文件
【发布时间】:2019-05-16 05:40:22
【问题描述】:

我使用以下代码流式传输推文

class CustomStreamListener(tweepy.StreamListener):
    def on_data(self, data):
        try:
            with open('brasil.json', 'a') as f:
                f.write(data)
                return True
        except BaseException as e:
            print("Error on_data: %s" % str(e))
        return True

现在我有一个 json 文件 (brasil.json)。我想在python上打开它来做情绪分析,但我找不到办法。我设法用这个打开了第一条推文:

with open('brasil.json') as f:
    for line in f:
        tweets.append(json.loads(line))

但它不会读取所有其他推文。有什么想法吗?

【问题讨论】:

  • 您的代码在我测试时有效。您最终的tweets 列表的长度是多少?我运行了您的CustomStreamListener 大约一分钟,得到了 1,813 条推文,然后运行您的代码来读取保存的 jsontweets 列表长度为 1,813。所以,我不能复制只阅读一条推文,它会阅读所有推文。再次检查tweets 列表的长度?
  • 我还有大约 2000 条推文(如果我用 excel 打开它)。但是在 python 中我得到这个错误: json.decoder.JSONDecodeError: Expecting value: line 2 column 1 (char 1)
  • 似乎缺少数据(“预期值”)或写入的数据不一致。当您在 Excel 中加载文件时,"line 2 column 1 (char 1)" 看起来像什么? (第 2 行,第 1 列)
  • 当我在 excel 中打开时,如果行,我的所有推文都是奇数。偶数为空
  • 好的,有 2 个简单的修复方法:您可以 1) 只读取奇数行 (for n, line in enumerate(f):),或 2) 使用 try / exceptexcept json.decoder.JSONDecodeError: pass。尝试您喜欢的任何一个,看看它是否有效。或者,如果您愿意,我可以将它们放在答案中,因为在 cmets 中格式化代码很困难

标签: python json twitter tweepy


【解决方案1】:

来自 cmets:检查 json 数据文件的内容后,所有推文的行数均为奇数。偶数为空。

这导致了json.decoder.JSONDecodeError

有两种方法可以处理这个错误,要么只读取奇数行,要么使用异常处理。

使用奇数行:

with open('brasil.json') as f:
    for n, line in enumerate(f, 1):
        if n % 2 == 1: # this line is in an odd-numbered row
            tweets.append(json.loads(line))

异常处理:

with open('brasil.json', 'r') as f:
    for line in f:
        try:
            tweets.append(json.loads(line))
        except json.decoder.JSONDecodeError:
            pass # skip this line 

试试看哪一种效果最好。

【讨论】:

  • 第一个选项一直显示同样的错误,第二个给我这个错误:'NameError: name 'f' is not defined'
  • 第一个选项的错误可能是由于python如何索引从0开始的行,但是excel以1开头。第二个是问题中原始代码中使用的相同 f 变量。请检查更新后的代码。
  • 哦,也许你应该知道,代码的第一部分是我用来获取推文的。现在我正在编写一个新脚本来打开 brasil.json 文件。我不知道这是否会影响任何事情
  • 是的,谢谢,好点...我确实使用了您的代码的两个部分来重现该问题。如果数据为空,我们可以尝试修复第一部分不将数据写入 json ......但我的回答只修复了打开 'brasil.json' 文件的脚本。
  • 请尝试答案中的新代码?我刚刚修好了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-05
  • 2020-09-04
相关资源
最近更新 更多