个人分类: 数据库 爬虫 python
在 python 编程开发中, 总是不可避免的遇到数据储存的问题, 下面就介绍 python 与几种数据储存方式交互的方法.
JSON 文件
JSON 是一种轻量级的数据交换格式. 采用完全独立于编程语言的文本格式来存储和表示数据. 层次结构简洁而清晰, 易于人阅读和编写, 同时也易于机器解析和生成, 并有效地提升网络传输效率.
最主要的是, 通过 JSON 这个包可以很方便的解决无论是 py2 还是 py3 中的编码问题, JSON 的内容结构也近似于 python 中的字典和列表, 操作起来特别方便.
- import JSON
- # 此时有一个 JSON 文件, 结构大概是 [{
- },{
- },{
- }...] 打开这个文件
- # 使用 JSON load 读取文件内容, 然后可以直接用列表或者字典的方式去操作 con 这个变量
- con = JSON.loads(content)
- # 那么如何储存为 JSON 文件呢?
- # 使用 dumps 将列表序列化并且转换为 unicode 编码, 储存的时候, 就可以存你最喜欢的 utf-8 了
- lis = [{
- },{
- },{
- }...]
- data = JSON.dumps(lis, ensure_ascii=False)
- f.write(data.encode('utf-8'))
CSV 文件
转换为 CSV 文件后, 我们就可以直接用 Excel 打开拉图表了
- import CSV
- # 打开文件
- with open(filename, 'w') as f:
- writer = CSV.writer(f) # 构造写入器
- data = ('1','2','3') # 填写三格
- data = ('','','3') # 填写一格, 前两格空起来
- data = ('1','') # 填写第一格, 后面无论多少格都空起来
- writer.writerow(data) # writerow 每执行一次, 写入一行 注意其中的参数 data 需要是一个元组
- # 注意, 在 Windows 中, 打开文件需要使用
- with open(filename, 'w', newline='') as f:
- # 否则每写一行都会多一个空行
- # 原因是 Windows 中换行符号是 \n\r ,CSV 库中并没有做特别的处理, 所以会产生空行
MySQL 数据库
应该是最常用的操作了, 使用 MySQL 的优点是看数据真的很直观 (如果使用 GUI 程序的话)
导入包略微不一样
- @python3
- import pymysql
- @python2
- import MySQLdb
- # 建立连接 注意数据库写入数据时数据的编码
- conn = MySQLdb.connect(host='localhost', port=3306, db='test',
- user='root', passwd='', charset='utf8')
- # 新建游标 游标操作 sql 语句
- cur = conn.cursor()
- result = cur.execute("insert into students(name) values('Jack')")
- result = cur.execute("insert into students(name,age) values(%s,%s)", params)
- # sql 对数据库数据有改变的时候, 使用 commit() 提交, 否则不生效
- conn.commit()
- # 返回数据到 python, 使用 fetchone 和 fetchall 从内存中取数据, 取了一个清空一个
- cur.execute('select * from students where id between 1 and 5')
- result=cur.fetchone()
- result=cur.fetchall()
- # 最后记得关闭连接
- cur.close()
- conn.close()
Redis 数据库
优点是方便, 速度快, 需要注意的是取出的数据是二进制数据, 一般需要转为字符串再操作.
操作大全: python-Redis 操作大全
- import Redis
- # 建立连接
- client = Redis.Redis(host='lcoalhost', port=6379)
- # 操作数据
- client.set('nums', [1,2,3,4,5])
- result = client.get('name')
- # 使用事务 (避免失败操作导致数据只操作了一半)
- pipe = client.pipeline()
- pipe.set('name', 'Jack')
- pipe.execute()
Mongdb 数据库
优点是不在乎数据结构, 需要注意的是取出来的时候要写个脚本整理一下.
- import pymongo
- # 建立连接 指定数据表
- client = pymongo.MongoClient('localhost', 27017)
- test1_db = client.test1
- sheet_stu = db.stu
- # 操作数据
- info = {
- name:'Jack',age:18
- }
- info_id = stu.insert_one(info).inserted_id
- cur_list = [cur for cur in stu.find()]
- count = stu.count()
来源: http://www.bubuko.com/infodetail-2814434.html