【Python】数据存储

  • 1 JSON 文件存储
    • 1. 对象和数组
    • 2. 数据写入规范
  • 2 CSV 文件存储
    • 1. 写入
    • 2.多行写入
    • 3.字典写入
    • 4. 爬虫采集入库
  • 3 关系型数据库存储
    • 1. 准备工作
    • 2. 连接数据库
    • 3. 创建数据表
    • 4. **插入数据**
    • 5. 字典数据插入
    • 6. 爬虫数据采集入库
  • 4 非关系型数据库存储
    • 1. MongoDB简介
    • 2. 连接 MongoDB
    • 3. 指定数据库和表
    • 4. 插入数据
      • 4.1. 插入多条数据
    • 5. 爬虫数据采集入库

1 JSON 文件存储

JSON,全称为 JavaScript Object Notation, 也就是 JavaScript 对象标记,它通过对象和数组的组合来表示数据,构造简洁但是结构化程度非常高,是一种轻量级的数据交换格式。本节中,我们就来了解如何利用 Python 保存数据到 JSON 文件。

1. 对象和数组

在 JavaScript 语言中,一切都是对象。因此,任何支持的类型都可以通过 JSON 来表示,例如字符串、数字、对象、数组等,但是对象和数组是比较特殊且常用的两种类型,下面简要介绍一下它们。

对象:它在 JavaScript 中是使用花括号 {} 包裹起来的内容,数据结构为 {key1:value1, key2:value2, …} 的键值对结构。在面向对象的语言中,key 为对象的属性,value 为对应的值。键名可以使用整数和字符串来表示。值的类型可以是任意类型。

数组:数组在 JavaScript 中是方括号 [] 包裹起来的内容,数据结构为 [“java”, “javascript”, “vb”, …] 的索引结构。在 JavaScript 中,数组是一种比较特殊的数据类型,它也可以像对象那样使用键值对,但还是索引用得多。同样,值的类型可以是任意类型。

所以,一个 JSON 对象可以写为如下形式:

[{"name": "Bob","gender": "male","birthday": "1992-10-18"
}, {"name": "Selina","gender": "female","birthday": "1995-10-18"
}]

由中括号包围的就相当于列表类型,列表中的每个元素可以是任意类型,这个示例中它是字典类型,由大括号包围。

JSON 可以由以上两种形式自由组合而成,可以无限次嵌套,结构清晰,是数据交换的极佳方式。

2. 数据写入规范

可以看到,中文字符都变成了 Unicode 字符,这并不是我们想要的结果。

为了输出中文,还需要指定参数 ensure_ascii 为 False,另外还要规定文件输出的编码:

import jsondata = [{'name': ' 王伟 ','gender': ' 男 ','birthday': '1992-10-18'}]with open('data.json', 'w', encoding='utf-8') as file:file.write(json.dumps(data, indent=2, ensure_ascii=False))

2 CSV 文件存储

CSV,全称为 Comma-Separated Values,中文可以叫作逗号分隔值或字符分隔值,其文件以纯文本形式存储表格数据。该文件是一个字符序列,可以由任意数目的记录组成,记录间以某种换行符分隔。每条记录由字段组成,字段间的分隔符是其他字符或字符串,最常见的是逗号或制表符。不过所有记录都有完全相同的字段序列,相当于一个结构化表的纯文本形式。它比 Excel 文件更加简洁,XLS 文本是电子表格,它包含了文本、数值、公式和格式等内容,而 CSV 中不包含这些内容,就是特定字符分隔的纯文本,结构简单清晰。所以,有时候用 CSV 来保存数据是比较方便的。本节中,我们来讲解 Python 读取和写入 CSV 文件的过程。

1. 写入

这里先看一个最简单的例子:

import csvwith open('data.csv', 'w') as csvfile:writer = csv.writer(csvfile)writer.writerow(['id', 'name', 'age'])writer.writerow(['10001', 'Mike', 20])writer.writerow(['10002', 'Bob', 22])writer.writerow(['10003', 'Jordan', 21])

首先,打开 data.csv 文件,然后指定打开的模式为 w(即写入),获得文件句柄,随后调用 csv 库的 writer 方法初始化写入对象,传入该句柄,然后调用 writerow 方法传入每行的数据即可完成写入。

如果想修改列与列之间的分隔符,可以传入 delimiter 参数,其代码如下:

import csvwith open('data.csv', 'w') as csvfile:writer = csv.writer(csvfile, delimiter=' ')writer.writerow(['id', 'name', 'age'])writer.writerow(['10001', 'Mike', 20])writer.writerow(['10002', 'Bob', 22])writer.writerow(['10003', 'Jordan', 21])

2.多行写入

调用 writerows 方法同时写入多行,此时参数就需要为二维列表,例如:

import csvwith open('data.csv', 'w') as csvfile:writer = csv.writer(csvfile)writer.writerow(['id', 'name', 'age'])writer.writerows([['10001', 'Mike', 20], ['10002', 'Bob', 22], ['10003', 'Jordan', 21]])

3.字典写入

用字典来表示。在 csv 库中也提供了字典的写入方式,示例如下:

import csvwith open('data.csv', 'w') as csvfile:fieldnames = ['id', 'name', 'age']writer = csv.DictWriter(csvfile, fieldnames=fieldnames)writer.writeheader()writer.writerow({'id': '10001', 'name': 'Mike', 'age': 20})writer.writerow({'id': '10002', 'name': 'Bob', 'age': 22})writer.writerow({'id': '10003', 'name': 'Jordan', 'age': 21})

4. 爬虫采集入库

import httpxres = httpx.get('https://careers.tencent.com/tencentcareer/api/post/Query?timestamp=1647605552864&countryId=&cityId=&bgIds=&productId=&categoryId=&parentCategoryId=&attrId=&keyword=python&pageIndex=2&pageSize=10&language=zh-cn&area=cn')
# 数据变字典格式
items = res.json()
item = items.get('Data')['Posts']  # 列表形式
data = []
for i in item:title =  i.get('RecruitPostName'),times =  i.get('LastUpdateTime'),data.append([title[0],times[0]])
import csv
with open('data2.csv', 'w',encoding='utf-8') as csvfile:writer = csv.writer(csvfile)writer.writerow(['id', 'name'])writer.writerows(data)

3 关系型数据库存储

关系型数据库是基于关系模型的数据库,而关系模型是通过二维表来保存的,所以它的存储方式就是行列组成的表,每一列是一个字段,每一行是一条记录。表可以看作某个实体的集合,而实体之间存在联系,这就需要表与表之间的关联关系来体现,如主键外键的关联关系。多个表组成一个数据库,也就是关系型数据库。

关系型数据库有多种,如 SQLite、MySQL、Oracle、SQL Server、DB2 等。

1. 准备工作

在开始之前,请确保已经安装好了 MySQL 数据库并保证它能正常运行,而且需要安装好 Py MySQL 库。如果没有安装找班主任老师拿包

下载地址;https://dev.mysql.com/downloads/mysql/

安装包:https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.9-winx64.zip

参考地址:https://blog.csdn.net/ychgyyn/article/details/84404217

百度网盘:链接:https://pan.baidu.com/s/15j768OT5uGz6_GR0FcrvoA 提取码:rokm

2. 连接数据库

这里,首先尝试连接一下数据库。假设当前的 MySQL 运行在本地,用户名为 root,密码为 123456,运行端口为 3306。这里利用 PyMySQL 先连接 MySQL,然后创建一个新的数据库,名字叫作 spiders,代码如下:

import pymysql  db = pymysql.connect(host='localhost',user='root', p assword='123456', port=3306)
cursor = db.cursor()   # 游标
cursor.execute('SELECT VERSION()')
data = cursor.fetchone()
print('Database version:', data)
cursor.execute("CREATE DATABASE spiders DEFAULT CHARACTER SET utf8")
db.close()

3. 创建数据表

import pymysql  db = pymysql.connect(host='localhost', user='root', p assword='123456', port=3306, db='spiders')
cursor = db.cursor()
sql = 'CREATE TABLE IF NOT EXISTS students (id VARCHAR(255) NOT NULL, name VARCHAR(255) NOT NULL, age INT NOT NULL, PRIMARY KEY (id))'
cursor.execute(sql)
db.close()

4. 插入数据

插入、更新和删除操作都是对数据库进行更改的操作,而更改操作都必须为一个事务,所以这些操作的标准写法就是:

import pymysqlid = '20220315'
user = '菲菲'
age = 20db = pymysql.connect(host='localhost', user='root', p assword='123456', port=3306, db='spiders')
cursor = db.cursor()# %s 动态传参
sql = 'INSERT INTO students(id, name, age) values(% s, % s, % s)'
try:cursor.execute(sql, (id, user, age))db.commit()
except:db.rollback()
db.close()

5. 字典数据插入


data = {'id':'20220315','name': '菲菲','age': 20
}keys = ', '.join(data.keys())
values = ', '.join(['% s'] * len(data))
sql = 'INSERT INTO students({keys}) VALUES ({values})'.format( keys=keys, values=values)
try:if cursor.execute(sql, tuple(data.values())):print('Successful')db.commit()
except:print('Failed')db.rollback()
db.close()

6. 爬虫数据采集入库

4 非关系型数据库存储

1. MongoDB简介

MongoDB 是由 C++ 语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储形式类似 JSON 对象,它的字段值可以包含其他文档、数组及文档数组,非常灵活。在这一节中,我们就来看看 Python 3 下 MongoDB 的存储操作。

安装地址

链接:https://pan.baidu.com/s/1JQK7eS4YOq6IoWqOkVt5KA
提取码:ezv5

2. 连接 MongoDB

连接 MongoDB 时,我们需要使用 PyMongo 库里面的 MongoClient。一般来说,传入 MongoDB 的 IP 及端口即可,其中第一个参数为地址 host,第二个参数为端口 port(如果不给它传递参数,默认是 27017)

import pymongo
# 如果是云服务的数据库   用公网IP连接
client = pymongo.MongoClient(host='localhost', port=27017)

3. 指定数据库和表

db = client.test
collection = db['students']  # 都可以

4. 插入数据

插入数据。对于 students 这个集合,新建一条学生数据,这条数据以字典形式表示:

student = {'id': '20170101','name': 'Jordan','age': 20,'gender': 'male'
}
result = collection.insert(student)
4.1. 插入多条数据
student1 = {'id': '20170101','name': 'Jordan','age': 20,'gender': 'male'
}student2 = {'id': '20170202','name': 'Mike','age': 21,'gender': 'male'
}result = collection.insert([student1, student2])
print(result)

5. 爬虫数据采集入库

# encoding: utf-8
"""
@author: 夏洛
@QQ: 1972386194
@file: mongo-test.py
"""import pymongo
client = pymongo.MongoClient(host='localhost', port=27017)db = client.test
collection = db['students']  # 都可以import httpxdef get_data():res = httpx.get('https://careers.tencent.com/tencentcareer/api/post/Query?timestamp=1647605552864&countryId=&cityId=&bgIds=&productId=&categoryId=&parentCategoryId=&attrId=&keyword=python&pageIndex=2&pageSize=10&language=zh-cn&area=cn')# 数据变字典格式items = res.json()item = items.get('Data')['Posts']  # 列表形式for i in item:if isinstance(i,dict):collection.insert_one(i)
get_data()

【Python】数据存储相关推荐

  1. python存储-Python数据存储之 h5py详解

    1.Python数据存储(压缩) (1)numpy.save , numpy.savez , scipy.io.savemat numpy和scipy内建的数据存储方式. (2)cPickle + g ...

  2. python 保存csv,Python数据存储到文件的3种方式

    原标题:Python数据存储到文件的3种方式 爬虫请求解析后的数据,需要保存下来,才能进行下一步的处理,一般保存数据的方式有如下几种: 文件:txt.csv.excel.json等,保存数据量小. 关 ...

  3. Python 数据存储读取,6千字搞定各种方法

    作者 | 老表 来源 | 简说Python 一.前言 二.专栏概要 三.做准备:将爬取到的数据存入csv和mysql.其他数据库 3.1 前情回顾 3.1 数据存入+读取csv 3.2 数据存入+读取 ...

  4. 跟李宁老师学Python视频课程(14):Python数据存储-李宁-专题视频课程

    跟李宁老师学Python视频课程(14):Python数据存储-109人已学习 课程介绍         本系列课程一共20套,每一套视频课程会深入讲解Python的一类知识点.Python是当今炙手 ...

  5. Python数据存储与压缩

    Python数据存储与压缩   跑实验要用到数据集,对于一些不大的数据集,为了节省时间,有时候会先预处理,然后将各个文件存储成一个大文件,一次性读入内存,省去了每个迭代重新读入和重新预处理的时间.这里 ...

  6. 以下用于数据存储领域的python第三方库是-Python数据存储及表示

    [http://naotu.baidu.com/file/15cbc506e3da5e640a40659058d5be24?token=873f2ab3461d8f9a](http://naotu.b ...

  7. python数据存储用什么_Python的小数据存储,用什么格式更有逼格?

    小数据存储 我们在编写代码的时候,经常会涉及到数据存储的情况,如果是爬虫得到的大数据,我们会选择使用数据库,或者excel存储.但如果只是一些小数据,或者说关联性较强且存在存储后复用的数据,我们该如何 ...

  8. python数据存储系列教程——xls文件的读写、追加(xlwt、xlwt、xlutils)

    全栈工程师开发手册 (作者:栾鹏) python教程全解 python将数据存储到excel文件.本文不通过与操作excel办公软件而是偏向于excel文件的处理.如果你需要通过python控制exc ...

  9. python数据存储系列教程——python对象与json字符串的相互转化,json文件的存储与读取

    全栈工程师开发手册 (作者:栾鹏) python教程全解 在json字符串和python对象的相互转化中,会进行下列变换. 会将python中字典的写法,转化为js中对象的写法.(没有区别). 会将p ...

  10. python数据存储和查询代码_【Python分享】如何便捷地存储、查询数据

    前言在之前的文章(如下)中,分享了爬取天天基金.中债指数的代码.爬取的数据很多,如何方便地存储.查询,也是一个麻烦的问题.本文分享一下我实现的基于 lsm-db 的本地文件数据存储.查询模块. 分享天 ...

最新文章

  1. 曲线聚类_机器学习入门必读:6种简单实用算法及学习曲线、思维导图
  2. 万维网源代码正在被发明人拍卖,有人出价1800万,还在不断上涨
  3. SLAM中有关占据栅格地图的的表示方法和利用激光传感器构建占据栅格地图的方法
  4. 为什么REST如此重要
  5. linux命令行界面下ctrl 常用组合键速查表
  6. 下载cx oracle 6,在Centos 6上安装cx_Oracle
  7. ubuntu下c++中base64编解码测试和图片编解码测试
  8. CentOS搭建SVN记录
  9. LLBL Gen 元数据编程 LLBL Gen Meta-data Programming
  10. 《代码整洁之道:程序员的职业素养》一一1.1 清楚你要什么
  11. 关于"舆情监测"关键词在百度搜索中的相关数分析
  12. U盘病毒肆虐横行 金山毒霸2011全面解决隐患
  13. 快速实现三菱Q系列PLC连接OPC服务器与物联网平台
  14. idea 报错Output directory is not specified错误
  15. Python - 使用python-opencv裁剪原视频为与视频高同宽的视频
  16. 2022年上半年信息系统项目管理师上午客观题参考答案及解析(三)
  17. 通俗易懂玩高数(3)—— Cauchy中值定理的证明
  18. 实时的工业以太网Ethernet Powerlink
  19. 温度压力测试软件什么好,温度压力测试
  20. 北京大学计算机硕博连读5年,北京大学研究生院

热门文章

  1. mac os - pptp协议连接
  2. 计算机网络(ISP,因特网组成,分组交换,计算机网络性能,网络体系机构)
  3. 数据库面试题(开发者必看)
  4. anaconda+pycharm安装
  5. 陈果《好的爱情》读书笔记
  6. WEB实现Excel下载的一种方式--JAVA EXCEL
  7. 拿了“普通女生”的人生剧本,可以不普通吗?
  8. linux空目录4kb,为什么 Linux 默认页大小是 4KB
  9. EasyPR--一个开源的中文车牌识别系统
  10. 名符其实的react下一代状态管理器hox