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

preface: 最近帮师兄处理json文件,需要读到数据库里面,以备其后续从数据库读取数据。数据是关于yelp网站里面的: https://github.com/Yelp/dataset-examples,http://www.yelp.com/dataset_challenge/. 涉及到一些json和sql的问题,记录下。

一、python sql安装

python 自带轻型数据库sqlite,不过用不了。需要mysql才行,pip安装mysql失败,easy_install安装也失败,这不科学。后经过同仁的帮忙,用conda安装成功,这什么鬼。好吧,查了下是python自带的包管理器conda

<span style="font-size:18px;">pip install MySQLdb
easy_install MySQLdb
pip install MySQL
easy_install MySQL
ipython
which python
sudo conda search mysql
conda search mysql
conda install mysql-python</span>

二、处理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("\n")
    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:\Python27\lib\json\__init__.py", line 338, in loads
    return _default_decoder.decode(s)
  File "C:\Python27\lib\json\decoder.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

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

时间: 2024-10-25 03:28:55

python读取json文件存sql及codecs读取大文件问题的相关文章

NeatUpload的安装使用 文件上传。可传大文件。

NeatUpload的安装使用 版本:NeatUpload-1.2.32,用于文件上传.可传大文件. 1.在VS工具箱中点右键选“选择项”…… 将Brettle.Web.NeatUpload.dll添加到工具箱. 可以在添加后的工具箱看到相应控件. 2.新建web项目.将NeatUpload复制到项目根目录. 3.修改Web.config <?xml version="1.0" encoding="utf-8"?> <configuration&g

python json及mysql——读取json文件存sql、数据库日期类型转换、终端操纵mysql及python codecs读取大文件问题

preface: 近期帮师兄处理json文件,须要读到数据库里面,以备其兴许从数据库读取数据.数据是关于yelp站点里面的: https://github.com/Yelp/dataset-examples,http://www.yelp.com/dataset_challenge/. 涉及到一些json和sql的问题,记录下. 一.python sql安装 python 自带轻型数据库sqlite,只是用不了.须要mysql才行.pip安装mysql失败.easy_install安装也失败.这

两个大文件,比较这两个大文件的差异

有两个文件A和B,分别保存了一个系统两天的数据快照. a.txt (格式为:号码,姓名,年龄,姓别,状态) 13900001111,小A,20,男,01 13900001112,小H,20,女,06 13900001113,小C,20,男,06 13900001114,小D,20,男,04 13900001116,小E,20,女,04 13900001118,小F,20,男,04 13900001119,小G,20,女,07 b.txt (格式和a一样:号码,姓名,年龄,姓别,状态) 13900

php文件上传参考配置与大文件上传

PHP用超级全局变量数组$_FILES来记录文件上传相关信息的,在php文件上传之前,可通过调节php.ini中相关配置指令,来控制上传相关细节. 1.file_uploads=on/off   是否允许通过http方式上传文件 2.max_execution_time=30   允许脚本最大执行时间,超过这个时间就会报错 3.memory_limit=50M   设置脚本可以分配的最大内存量,防止失控脚本占用过多内存,此指令只有在编译时设置了    --enable-memory-limit标

【赵强老师】在Spark SQL中读取JSON文件

Spark SQL是Spark用来处理结构化数据的一个模块,它提供了一个编程抽象叫做DataFrame并且作为分布式SQL查询引擎的作用.为什么要学习Spark SQL?如果大家了解Hive的话,应该知道它是将Hive SQL转换成MapReduce然后提交到集群上执行,大大简化了编写MapReduce的程序的复杂性,由于MapReduce这种计算模型执行效率比较慢.所以Spark SQL的应运而生,它是将Spark SQL转换成RDD,然后提交到集群执行,执行效率非常快!同时Spark SQL

3分钟学会,学会用Python正确读取大文件

文件读写属于一种常见的IO操作,由于操作系统将底层操作磁盘的接口向上封装为一种通用接口,因此Python中读写文件的基本方法和JAVA.PHP等高级编程语言一样,先请求操作系统打开一个文件描述符,通过操作系统提供的接口从这个文件对象中读取数据,或者把数据写入这个文件中,最后当文件读写操作完成后关闭文件. 需要注意的是文件读写完成后必须及时关闭文件,一方面打开的文件会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限制的,比如Linux操作系统中我们可以使用ulimit -n命令查看

Android读取JSON格式数据

Android读取JSON格式数据 1. 何为JSON? JSON,全称为JavaScript Object Notation,意为JavaScript对象表示法. JSON 是轻量级的文本数据交换格式 JSON 独立于语言 JSON 具有自我描写叙述性,更易理解 相比 XML 的不同之处: 没有结束标签 更短 读写的速度更快 使用数组 不使用保留字 JSON 使用 JavaScript 语法来描写叙述数据对象,可是 JSON 仍然独立于语言和平台.JSON 解析器和 JSON 库支持很多不同的

Java解析(读取)Json数据

以前看过书上说,XML是web service间传输信息的标准格式吧,就看了看XML.最近在做个网站,又说是有了JSON,第一回听说就看了看,总结总结一下. 1.JSON介绍 JSON比XML简单,主要体现在传输相同信息的情况下,文件的大小不同. JSON只用于传输信息,XML还可以用于配置文件的使用. JSON中的符号主要有: " , [ {: 2.JSON中的数组和对象 2.1数组(JSONArray) 数组用一对[],表示存放的是一般的数组数据. 如:["11",&qu

sql server 2000,Log.LDF文件丢失,附加数据库失败的解决办法[转]

SQL Server数据库备份有两种方式,一种是使用BACKUP DATABASE将数据库文件备份出去,另外一种就是直接拷贝数据库文件mdf和日志文件ldf的方式.下面将主要讨论一下后者的备份与恢复.本文假定您能熟练使用SQL Server Enterprise Manager(SQL Server企业管理器)和SQL Server Quwey Analyser(SQL Server查询分析器) 1.正常的备份.恢复方式 正常方式下,我们要备份一个数据库,首先要先将该数据库从运行的数据服务器中断