我在建一个聊天机器人数据库自动取款机。我使用来自pushshift.io的数据。为了处理大数据文件(我知道json
把所有东西都加载到内存中,所以如果你只有16 3GB的内存和30 3GB的数据,这是不可能的),我写了一个bash脚本,它将大文件分成3 3GB的小块文件,这样我就可以通过json.loads
(或pd.read_json
)运行它。问题是每当我运行我的代码时,它都会返回
JSONDecodeError: Expecting value: line 1 column 1 (char 0)
因此,我查看了我刚刚创建的json文件,我看到这发生在我的temp
文件中:
ink_id":"t3_2qyr1a","body":"Most of us have some family members like this. *Most* of my family is like this. ","downs":0,"created_utc":"1420070400","score":14,"author":"YoungModern","distinguished":null,"id":"cnas8zv","archived":false,"parent_id":"t3_2qyr1a","subreddit":"exmormon","author_flair_css_class":null,"author_flair_text":null,"gilded":0,"retrieved_on":1425124282,"ups":14,"controversiality":0,"subreddit_id":"t5_2r0gj","edited":false}
数据的样本校正如下所示
{"score_hidden":false,"name":"t1_cnas8zv","link_id":"t3_2qyr1a","body":"Most of us have some family members like this. *Most* of my family is like this. ","downs":0,"created_utc":"1420070400","score":14,"author":"YoungModern","distinguished":null,"id":"cnas8zv","archived":false,"parent_id":"t3_2qyr1a","subreddit":"exmormon","author_flair_css_class":null,"author_flair_text":null,"gilded":0,"retrieved_on":1425124282,"ups":14,"controversiality":0,"subreddit_id":"t5_2r0gj","edited":false}
我注意到我的bash脚本拆分了文件,而没有注意JSON对象。所以我的问题是,有没有办法用python编写一个函数来检测没有正确格式化的JSON对象并将其删除?
发布于 2019-05-10 07:55:52
没有太多的信息可以继续,但我想对框架提出一点挑战。
Python中有几个增量式json解析器。快速搜索一下就会发现,ijson
应该允许您在不爆炸的情况下遍历非常大的数据结构。
您还应该考虑另一种数据格式(或真正的数据库),否则您将很容易发现自己花时间重新实现已有的使用正确工具的功能的慢得多的版本。
发布于 2019-05-10 07:42:43
如果您使用的是json standard library,那么对格式错误的数据调用json.loads
将返回JSONDecodeError
。您可以将代码放在try-catch语句中,并检查是否发生此异常,以确保只处理正确格式化的数据。
https://stackoverflow.com/questions/56068674
复制相似问题