[{
“name”:“Bob”,
“gender”:“male”,
“birthday”:“1992-10-18”
},{
“name”:“Selina”,
“gender”:“female”,
“birthday”:“1995-10-18”
}]
### 2、读取JSON
可以调用JSON库中的**loads方**法将JSON文本字符串转为JSON对象。实际上,JSON对象就是Python中列表和字典的嵌套与组合。反过来,我们可以通过**dumps方法**将JSON对象转为文本字符串。
print(type(str)) # <class ‘str’>
data = json.loads(str)
print(data)
print(type(data)) # <class ‘list’> 列表类型
可以用索引取值:
data[0][‘name’]
data[0].get(‘name’)
推荐使用get方法,即使键名不存在也不会报错。
* 注意、JSON的数据需要用**双引号**包围起来,而不能使用单引号。
读取JSON文本文件 法1:
with open(‘data.json’,encoding=‘utf-8’) as file:
str = file.read()
data = json.loads(str)
print(data)
读取JSON文本文件 法2:
data = json.load(open(‘data.json’,encoding=‘utf-8’))
print(data)
### 3、输出JSON
调用**dumps方法**将JSON对象转化为字符串。
import json
data = [{
‘name’:‘Bob’,
‘gender’:‘male’,
‘birthday’:‘1992-10-18’
}]
with open(‘data.json’,‘w’,encoding=‘utf-8’) as file:
file.write(json.dumps(data))
* 若想保存JSON对象的缩进格式,可以再往dumps方法中添加一个参数**indent,代表缩进字符的个数。**
with open(‘data.json’,‘w’,encoding=‘utf-8’) as file:
file.write(json.dumps(data,indent=2))
要想**输出中文**,还需要**指定参数ensure\_ascii为False**,以及规定文件输出的编码:
with open(‘data.json’,‘w’,encoding=‘utf-8’) as file:
file.write(json.dumps(data,indent=2,ensure_ascii=False))
## 三、CSV文件存储
CSV,全称Comma-Separated Values,中文叫做逗号分隔值或字符分隔值,其文件**以纯文本形式\*\*\*\*存储表格数据**。
### 1、写入
import csv
with open(‘data.csv’,‘w’) as csvfile: # 打开data.csv文件,指定模式为写入。
writer = csv.writer(csvfile) # 使用csv库的writer方法初始化对象
writer.writerow([‘id’,‘name’,‘age’])# 调用writerow方法传入每行的数据
writer.writerow([‘10001’,‘Mike’,‘20’])
writer.writerow([‘10002’,‘Bob’,‘22’])
writer.writerow([‘10003’,‘Jordan’,‘21’])
* 若要修改列与列之间的分隔符,传入**delimiter参数**:
with open(‘data.csv’,‘w’) as csvfile:
writer = csv.writer(csvfile,delimiter=’ ')
writer.writerow([‘id’,‘name’,‘age’])
* 也可调用**writerows写入多行**,此时参数需要传入二维列表:
with open(‘data.csv’,‘w’) as csvfile:
writer = csv.writer(csvfile)
writer.writerow([‘id’,‘name’,‘age’])
writer.writerow([[‘10001’,‘Mike’,‘20’],[‘10002’,‘Bob’,‘22’],[‘10003’,‘Jordan’,‘21’]])
* **一般情况下,爬虫爬取到的都是结构化数据,我们一般会用字典表示这种数据。csv也提供了字典的写入方式。**
with 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’})
需要追加模式则w改为a
要写入中文则,添加编码格式encoding=‘utf-8’
### 2、读取
with open(‘data.csv’,‘r’,encoding=‘utf-8’) as csvfile:
reader = csv.reader(csvfile)
for row in reader:
print(row)
## 四、MySql存储
* 关系型数据库是基于关系模型的数据库,而关系模型是通过二维表来保存的,所以关系型数据库中数据的存储方式就是行列组成的 表,每一列代表一个字段,每一行代表一条记录。
* 表可以看做某个实体的集合,实体之间存在的联系需要通过表与表之间的关联关系体现。
### 1、准备工作
pip3 install pymysql
### 2、连接数据库
import pymysql
db = pymysql.connect(host=‘127.0.0.1’, user=‘root’, password=‘password’, port=3306)
cursor = db.cursor()
cursor.execute(‘SELECT VERSION()’)
data = cursor.fetchone()
print(‘Database version:’, data)
创建数据库
cursor.execute(“CREATE DATABASE spiders DEFAULT CHARACTER SET utf8mb4”)
db.close()
通过pymysql的connect方法声明了一个MySQL对象db,传入MySQL运行的host、user(用户名)、password(密码)、port(端口号)。
连接成功后,调用cursor方法获得MySQL的操作游标,利用游标可以执行MySQL语句。
第一个SQL语句用于获得MySQL的当前版本,然后调用fetchone方法得到了第一条数据,即版本号
第二个SQL语句用于创建数据库spiders,默认编码为UTF-8。
### 3、创建表
db = pymysql.connect(host=‘127.0.0.1’, user=‘root’, password=‘password’, port=3306,db= ‘spiders’)
cursor = db.cursor()
创建一个名为students的数据表
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、插入数据
data = {
‘id’: ‘20120001’,
‘name’: ‘Bob’,
‘age’: 20
}
table = ‘students’
keys = ‘,’.join(data.keys()) # id,name,age
values = ‘,’.join([‘%s’] * len(data)) # %s,%s,%s
sql = ‘INSERT INTO {table}({keys}) VALUES ({values})’.format(table=table, keys=keys, values=values)
try:
if cursor.execute(sql, tuple(data.values())):
print(‘Successful’)
db.commit()
except:
print(‘Failed’)
db.rollback()
db.close()
首先构造需要插入的字段:id,name和age。
### 5、更新数据
data = {
‘id’: ‘20120001’,
‘name’: ‘Bob’,
‘age’: 21
}
table = ‘students’
keys = ‘,’.join(data.keys())
values = ‘,’.join([‘%s’] * len(data))
sql = 'INSERT INTO {table}({keys}) VALUES ({values}) ON DUPLICATE KEY UPDATE '.format(table=table, keys=keys, values=values)
update = ‘,’.join([“{key} = %s”.format(key=key) for key in data])
sql += update
try:
if cursor.execute(sql, tuple(data.values())*2):
print(‘Successful’)
db.commit()
except:
print(‘Failed’)
db.rollback()
db.close()
### 6、删除数据
最后
Python崛起并且风靡,因为优点多、应用领域广、被大牛们认可。学习 Python 门槛很低,但它的晋级路线很多,通过它你能进入机器学习、数据挖掘、大数据,CS等更加高级的领域。Python可以做网络应用,可以做科学计算,数据分析,可以做网络爬虫,可以做机器学习、自然语言处理、可以写游戏、可以做桌面应用…Python可以做的很多,你需要学好基础,再选择明确的方向。这里给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
👉Python所有方向的学习路线👈
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
👉Python必备开发工具👈
工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。
👉Python全套学习视频👈
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。
👉实战案例👈
学python就与学数学一样,是不能只看书不做题的,直接看步骤和答案会让人误以为自己全都掌握了,但是碰到生题的时候还是会一筹莫展。
因此在学习python的过程中一定要记得多动手写代码,教程只需要看一两遍即可。
👉大厂面试真题👈
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!