问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

python怎么读取比较大的json文件

发布网友 发布时间:2022-04-08 01:02

我来回答

2个回答

懂视网 时间:2022-04-08 05:23

二、处理json数据

python有自带解析json的包,如同解析html的beautifulsoup, 解析xml的xml包等等。用json.loads()函数可破。以下几句代码可破。

<span style="font-size:18px;">import json
import codecs
f = codecs.open(file_name,encoding = "utf-8")
for line in f:
 line = line.strip("
")
 line_dict = json.loads(line)</span>
需要注意的是:

1.卤主用的是codecs读入文件,曾经以为

<span style="font-size:18px;">with codecs.open(file_name,encoding = "utf-8") as f:
 text = f.readlines()</span>

通过readlines()是一行一行的读入,但是这次遇到1.4G的json文件时,内存溢出。转为直接用上面的,而非用readlines()函数读。

2.json.loads()传入的参数需要是json字符串,卤主一行一行的读入,传入json字符串,解析后,是一个字典。接下来就好处理了。看个人需要进行分析。

#============================

方法2:将整个json文件作为参数传入到

f = file(file_name)

s = json.load(f)

但这样会遇到ValueError:Extra data错误,查了下资料,说是多个json对象的问题,这不废话么,一个文件夹里肯定多个json对象。stackoverflow里面解释的很详细http://stackoverflow.com/questions/21058935/python-json-loads-shows-valueerror-extra-data。

<span style="font-size:18px;">>>> json.loads('{}')
{}
>>> json.loads('{}{}') # == json.loads(json.dumps({}) + json.dumps({}))
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
 File "C:Python27libjson\__init__.py", line 338, in loads
 return _default_decoder.decode(s)
 File "C:Python27libjsondecoder.py", line 368, in decode
 raise ValueError(errmsg("Extra data", s, end, len(s)))
ValueError: Extra data: line 1 column 3 - line 1 column 5 (char 2 - 4)

>>> dict1 = {}
>>> dict2 = {}
>>> json.dumps([dict1, dict2])
'[{}, {}]'
>>> json.loads(json.dumps([dict1, dict2]))
[{}, {}]</span>

卤主没用方法2,故没有深究。

三、存sql

一开始没试过,等真正查找博客编写自己的代码的时候比自己想象的简单。直接上有注释的代码。

<span style="font-size:18px;">import MySQLdb as mdb
#需要创建数据库yelp_dataset_challenge_academic_daaset
conn = mdb.connect(host = 'XXX.XX.XX.XX', user = 'XXX', passwd = '', db = 'yelp_dataset_challenge_academic_daaset')
cur = conn.cursor()#初始化游标
#conn.set_character_set("utf-8")
cur.execute('SET NAMES utf8;') 
cur.execute('SET CHARACTER SET utf8;')
cur.execute('SET character_set_connection=utf8;')
#===============建表,先删除已存在的记录。表本身不删除,不用drop,用delete
table_name = "yelp_academic_dataset_checkin"
delete_table = "delete from "+table_name
cur.execute(delete_table)
#需要在数据库中创建表yelp_academic_dataset_checkin,及字段和字段属性类型。
#写sql语句创建也行,不
insert_sql = "insert into yelp_academic_dataset_checkin (type,business_id,checkin_info) values (%s,%s,%s)"
#=====从json得到value的一些步骤,略。============
values_tuple = (str(temp_values[0]),str(temp_values[1]),str(temp_values[2]))
cur.execute(insert_sql,values_tuple)
#执行完了,需要关掉
conn.commit()
conn.close() </span>

另外似乎可以json--->dataframe--->sql,用pandas.io.json相关的。卤主没有试过,以后有机会可以一试。

参考:

1.https://github.com/Yelp/dataset-examples

2.http://www.yelp.com/dataset_challenge/

3.http://stackoverflow.com/questions/21058935/python-json-loads-shows-valueerror-extra-data

版权声明:本文为博主原创文章,未经博主允许不得转载。

python读取json文件存sql及codecs读取大文件问题

标签:conda   mysql   yelp   sqlite   

热心网友 时间:2022-04-08 02:31

你的比较大是有多大,大到内存里放不下?
# -*- coding:utf-8 -*-
import json
import sys
import re
import traceback
reload(sys)
sys.setdefaultencoding("utf-8")
try:
f = file(r'XXX.json')
jsonobj = json.load(f)
for i in range(len(jsonobj)):
for key in jsonobj[i]:
print key,jsonobj[i][key]
except:
traceback.print_exc()
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
人大政协辅助岗是什么 政务辅助人员是干什么 政府辅助人员是什么 努比亚的海拔什么意思 北非努比亚现在怎么样了啊 相邻权的相关法律 梦见老公离世了什么预兆 梦见自己老公走掉 你出轨后 怎么操作才没被发现? 评评怎么造句 华为手机不会使用,有谁知道怎么查看我的电池真实使用时间? 华为手机怎样查电池的用使用时间 如何转换播放文件格式?比如把MP4文件转换为RMVB文件? 怎样查看手机电池的实际使用时间 MP4格式怎么改为RMVB格式呢? mp4格式怎么样转换rmvb格式 ①②③④这样的有圈圈的数字符号,麻烦给我1~20.....气死了,居然忘了怎么弄11~20 微信转账还款应怎么备注 南通火车站和南通动车站是一个车站吗 南通D开头的高铁站在哪 原来的火车站吗? 南通高铁站跟高铁西站哪个站离机场近一些 南通动车站在哪里 南通动车车站在那里 奶水不足怎样科学断奶 南通高铁站在哪 母乳喂养到多大合适?该如何科学的断奶呢? 南通高铁站在什么位置? 怎么科学断奶? 南通高铁在那坐车啊? 坐南通去徐州的高铁上面显示的是从南通到徐州东,那是从哪里坐呀,是南通火车站那边么,还是南通西站? ai中如何分块上色 为什么花呗突然要还很多? 花呗怎么越还越多? 花呗金额会不会算错,没怎么用花呗,可越还越多? ai上色为后有些线不见了? 就是之前我买的东西不知道怎么把把花呗打开了现在欠费了还越耒越多我都不知道? 花呗无故多出帐单,信用卡还款后还有欠款? 花呗欠了518,下个月怎么翻倍了,变成了1000多,而且每个月都有518? 新买的ie80单元壳里面的旋钮都是散件怎么安装? IE80煲机是把低音旋钮开到最低对耳机有影响不 还有煲机时间保持在多少为好 请IE80的低频旋钮到底作用大不大 正版的IE80 能调节多少db 低音? 熊猫竹子IE80,低频调节没变化,求解,谢谢 刚买了森海ie80,求具体的煲机方法 歌单,播放顺序,音量调节,时间……总之越具体越好 IE80 听流行是不是很渣?低音调节一般都放在那一档上?德版1900元,会不会买假? 森海ie80单元的那个旋钮 效果明显吗? 森海塞尔ie8或者ie80的低音调节器效果很明显吗? 请用过的朋友帮忙回答下,谢谢 ie8和ie80的区别是什么,价格差那么大? 如何查看linux系统使用的dhcp分配的ip来自哪台dhcp服务器 什么金属可以提炼黄金