我有一个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)
过去三天我一直在研究这个问题,并且没有提出任何问题。谁能请帮忙告诉我我做错了什么?
答案 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,因为我需要在单独的文件中使用英语和法语推文。