[英]Python reading records from a json file and writing to two separate json files
我有一个twitter json文件,我正在尝试将英语和法语推文分为两个单独的文件。 我正在将Python 2.7与以下代码结合使用:
import json
with open('tweets.json', 'r') as f:
with open('english.json', 'w') as enF:
with open('french.json', 'w') as frF:
for line in f:
tweet = json.loads(line)
if tweet["lang"] == "en":
json.dump(tweet, enF, sort_keys=True)
elif tweet["lang"] == "fr":
json.dump(tweet, frF, sort_keys=True)
这将产生两个单独的json文件,一个文件具有英语推文,另一个文件具有法语,我已经检查过。 原始文件每行一条推文。 english.json和french.json文件只有所有推文中的一行。 不知道这是否会有问题,甚至不确定这是否正确。 因此,我再次通过此代码传递了english.json(显然,我更改了文件名),并给出了一个错误:
Traceback (most recent call last):
File "C:\Users\jack\Desktop\twitClean\j4.py", line 10, in <module>
tweet = json.loads(line)
File "C:\Python27\lib\json\__init__.py", line 339, in loads
return _default_decoder.decode(s)
File "C:\Python27\lib\json\decoder.py", line 367, in decode
raise ValueError(errmsg("Extra data", s, end, len(s)))
ValueError: Extra data: line 1 column 4926 - line 1 column 691991 (char 4925 - 691990)
在过去的三天中,我一直在为此工作,但一无所获。 谁能帮忙告诉我我做错了什么吗?
这样加载json文件呢?
with open('tweets.json', 'r') as f:
tweets_dict = json.load(f)
然后,假设json的python本地表示形式是字典,则可以对其进行迭代,并构建与法语和英语相关的字典。 我的意思是
fr_dict, en_dict, ot_dict = {}, {}, {}
for id_,tweet in tweets_dict.items():
if tweet['lang'] == 'fr':
fr_dict[id_] = tweet
elif tweet['lang'] == 'en':
en_dict[id_] = tweet
else:
ot_dict[id_] = tweet
with open('french.json', 'w') as frF:
json.dump(fr_dict, frF, sort_keys=True)
with open('english.json', 'w') as enF:
json.dump(en_dict, enF, sort_keys=True)
with open('other.json', 'w') as otF:
json.dump(ot_dict, otF, sort_keys=True)
已解决:不幸的是,作为一个Python黑客,我无法使用python解决此问题。 我确定一定有使用python的方法。 因此,如果有人需要这样的解决方案,我发现的解决方案是使用jq如下:
cat jsonfile | jq '. | select(.lang=="en")' > savefile
显然,使用此代码必须将jsonfile读取两次,因为我需要在单独的文件中使用英语和法语tweet。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.