Python从json文件中读取记录并写入两个单独的json文件

时间:2017-04-03 13:41:17

标签: json python-2.7 twitter

我有一个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)

过去三天我一直在研究这个问题,并且没有提出任何问题。谁能请帮忙告诉我我做错了什么?

2 个答案:

答案 0 :(得分:0)

如何加载json文件

with open('tweets.json', 'r') as f:
    tweets_dict = json.load(f)

然后,鉴于json的python-native表示是一个词典,你可以在它上面构建你的法语和英语相关的词典。我的意思是,做

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)

答案 1 :(得分:0)

解决:不幸的是,只是一个python黑客我无法用python解决这个问题。我确定必须有一种使用python的方法。因此,如果其他人需要这样的解决方案,那就是。我找到的解决方案是使用jq如下:
cat jsonfile | jq '. | select(.lang=="en")' > savefile

显然使用此代码时,必须读取两次jsonfile,因为我需要在单独的文件中使用英语和法语推文。