我有一个twitter json文件,我试图将英文和法文推文分成两个单独的文件。我使用Python 2.7使用下面的代码:Python从json文件读取记录并写入两个单独的json文件
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)
我一直工作在这过去三天了,都来一无所有。任何人都可以请帮助,并告诉我我做错了什么?
当你做'tweet = json.loads(line)'时,你假设每行有一个类似json的元素。这可能是你为什么得到错误'ValueError:Extra data:[']''的原因。相反,你应该阅读这样的json文件,例如使用'json.loads(f)',其中'f'是打开的json文件对象,即'open('tweets.json','r')'。然后你可以探索它。看到上面的答案。它工作吗? – Kanak
这适用于给新文件。当我通过这段代码运行其中一个新文件时,它仍然会出现相同的错误。 – user1907031
你从'json.loads'中删除's'吗?然后,您将使用正确的方法来处理类文件对象,*即*,'json.load',**而不包含s **。如果你得到相同的错误,看起来你没有。看到上面的答案。 – Kanak