发布网友 发布时间:2022-04-08 01:02
共2个回答
懂视网 时间:2022-04-08 05:23
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>
一开始没试过,等真正查找博客编写自己的代码的时候比自己想象的简单。直接上有注释的代码。
<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
你的比较大是有多大,大到内存里放不下?