python储存数据的方式
2017年10月13日 23:38:10 Nick_Spider 阅读数:59286 标签: redis 数据库 爬虫 存储 结构 更多
个人分类: 数据库 爬虫 python

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_39198406/article/details/78231430
在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()

python储存数据的方式的更多相关文章

  1. Python存储数据的方式

    在Python开发中,数据存储.读取是必不可少的环节,而且可以采用的存储方式也很多,常用的方法有json文件.csv文件.MySQL数据库.Redis数据库以及Mongdb数据库等. 1. json文 ...

  2. Python多线程爬虫与多种数据存储方式实现(Python爬虫实战2)

    1. 多进程爬虫 对于数据量较大的爬虫,对数据的处理要求较高时,可以采用python多进程或多线程的机制完成,多进程是指分配多个CPU处理程序,同一时刻只有一个CPU在工作,多线程是指进程内部有多个类 ...

  3. 05.Python网络爬虫之三种数据解析方式

    引入 回顾requests实现数据爬取的流程 指定url 基于requests模块发起请求 获取响应对象中的数据 进行持久化存储 其实,在上述流程中还需要较为重要的一步,就是在持久化存储之前需要进行指 ...

  4. Python爬虫之三种数据解析方式

    一.引入 二.回顾requests实现数据爬取的流程 指定url 基于requests模块发起请求 获取响应对象中的数据 进行持久化存储 其实,在上述流程中还需要较为重要的一步,就是在持久化存储之前需 ...

  5. 05,Python网络爬虫之三种数据解析方式

    回顾requests实现数据爬取的流程 指定url 基于requests模块发起请求 获取响应对象中的数据 进行持久化存储 其实,在上述流程中还需要较为重要的一步,就是在持久化存储之前需要进行指定数据 ...

  6. 《Python网络爬虫之三种数据解析方式》

    引入 回顾requests实现数据爬取的流程 指定url 基于requests模块发起请求 获取响应对象中的数据 进行持久化存储 其实,在上述流程中还需要较为重要的一步,就是在持久化存储之前需要进行指 ...

  7. Python网络爬虫之三种数据解析方式 (xpath, 正则, bs4)

    引入 回顾requests实现数据爬取的流程 指定url 基于requests模块发起请求 获取响应对象中的数据 进行持久化存储 其实,在上述流程中还需要较为重要的一步,就是在持久化存储之前需要进行指 ...

  8. Python爬虫的三种数据解析方式

    数据解析方式 - 正则 - xpath - bs4 数据解析的原理: 标签的定位 提取标签中存储的文本数据或者标签属性中存储的数据 正则 # 正则表达式 单字符: . : 除换行以外所有字符 [] : ...

  9. (数据科学学习手札06)Python在数据框操作上的总结(初级篇)

    数据框(Dataframe)作为一种十分标准的数据结构,是数据分析中最常用的数据结构,在Python和R中各有对数据框的不同定义和操作. Python 本文涉及Python数据框,为了更好的视觉效果, ...

随机推荐

  1. 『Github』简易使用指南

    一.新建repository 新建项目从下图位置开始, 当我们完成了初始化后,找不到创建/上传文件的位置,只需如下操作, 然后, 即可,当然,按照下图提示进行命令行操作实际是一样的, 创建了READM ...

  2. The Doors

    The Doors You are to find the length of the shortest path through a chamber containing obstructing w ...

  3. Visual Studio编译时报错“函数名:重定义;不同的基类型”

    错误原因: 方法在还未声明的地方就使用了.由于使用的地方与定义的地方都是在同一个.c文件中,所以没有报未声明的错误. 解决方法: 把实现放到使用的前面,或者在include语句和宏定义后面加上函数声明 ...

  4. Hadoop---目录结构介绍

    Hadoop---目录结构介绍 1.Hadoop目录结构 1.一级目录介绍    2.etc详解: 3sbin 4.bin 5.share 6.一个数独测试 2.hadoop的历史     3. Ha ...

  5. 在Eclipse中无法链接到svn,出现Previous operation has not finished; run 'cleanup' if it was interrupted异常

    由于使用了clean或是clean up导致和svn断开链接 1.下载一个sqlite3.exe 2.将sqlite3.exe放到本项目的.svn同级目录下(.svn默认是隐藏,让.svn文件夹显示查 ...

  6. python and pycharm and django 环境配置

    python 安装   https://www.python.org/ 我的是win7 32位,下载exe文件傻瓜式安装…… cmd 输入命令 python  则安装成功 如果不能进入,则有可能是环境 ...

  7. 把旧系统迁移到.Net Core 2.0 日记 (12) --发布遇到的问题

    1. 开发时是在Mac+MySql, 尝试发布时是在SQL2005+Win 2008 (第一版) 在Startup.cs里,数据库连接要改,分页时netcore默认是用offset关键字分页, 如果用 ...

  8. python(4)之字典

    字典的操作方式如下: info={ 'stu1101':"xiaohai", 'stu1102':'liming', 'stu1103':"heima", } ...

  9. Redis分布式锁实例

    maven依赖 <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</ ...

  10. window.open打开新窗口 参数

    1,基本描述 oNewWindow = window.open( sURL , sName , sFeatures, bReplace) window.open在打开一个窗口(其url为sURL)后, ...