我有一个文件,我在每行上写了json.dumps(tweet)
(大约300000行)。写行的代码是:
for tweet in collection:
outputfile.write(json.dumps(tweet)+"\n")
written_tweets += 1
该文件看起来很棒,正是我需要的:
一个样本行看起来像(所有外观相同 - 检查过的事实):
{"url": "http://youtu.be/F4pkpyRFLgA?a", "text": "I liked a @YouTube video Spoopy foxy Halloween", "screen_name": "placiboeffect", "id": 9255295 90155661313, "time": "Wed Nov 01 01:07:04 +0000 2017"}
然后在另一个python脚本中我试图使用这个文件,逐个读取行并清理它们(不重要)。我这样做:
lines = open(self.input_file, 'r').read().splitlines()
content = []
faulty_lines = 0
for line in lines:
line = line.replace('\\"', '\\\"')
try:
content.append(json.loads(line))
except Exception as e:
faulty_lines += 1
print (line)
raise e
每个文件的某些行(大约1000-2000)的json.loads失败,在分析行时,我得到一个奇怪的行,我的文件中存在2行的组合,例如:
{"url": "http://youtu.be/mI7XX{"url": "http://youtu.be/fLU8eksPyyE?a", "text": "I liked a @YouTube video WHERE WILL BLEDSOE BE TRADED? 7 POSSIBLE TRADES!", "screen_name": "WTS2323", "id": 925529722926370816, "time": "Wed Nov 01 01:07:36 +0000 2017"}
有点奇怪地合并2行,当然json.loads失败了。我能够在我的文件中找到这个组合推文的部分内容。
注意:我尝试了多种阅读策略:
with open(self.input_file) as f:
for line in f:
/*do whatever*/
或
lines = open(self.input_file).readlines()
lines = [x.strip() for x in lines]
和其他人。我总是得到这个奇怪的组合推文。有人可以帮我找出为什么会这样吗??
更新:合并的行是:
{"url": "http://youtu.be/fLU8eksPyyE?a", "text": "I liked a @YouTube video WHERE WILL BLEDSOE BE TRADED? 7 POSSIBLE TRADES!", "screen_name": "WT S2323", "id": 925529722926370816, "time": "Wed Nov 01 01:07:36 +0000 2017"}
和
{"url": "http://youtu.be/mI7XXoSHHg4?a", "text": "I liked a @YouTube video Dat $tick - Rich Chigga (ACOUSTIC COVER)", "screen_name": "rifqihahay ", "id": 925529589903962119, "time": "Wed Nov 01 01:07:04 +0000 2017"}