文件存储
TXT文本
打开方式
r:只读
rb:二进制打开文件
r+:读写方式打开文件
rb+:二进制读写方式打开文件
w:写入方式打开文件
wb:二进制写入方式打开文件
w+:读写方式打开文件
a:追加方式打开文件
ab:二进制追加方式打开文件
a+:读写方式打开文件
ab+:二进制追加方式打开文件
#方法一
open('html.txt','w',encoding='utf-8').write('123')
#方法二
with open('html.txt','w',encoding='utf-8')as f:
f.write('123')
JSON文件
如下:这就是一个json对象,本质就是一个列表中有多个字典
[{
"name":"Bob",
"birthday":"2001.1.1"
},{
"name":"Aike",
"birthday":"2001.2.2"
}]
json的基本使用
import json
str='''
[{
"name":"Bob",
"birthday":"2001.1.1"
},{
"name":"Aike",
"birthday":"2001.2.2"
}]
'''
print(type(str))
data=json.loads(str)#json转化成列表
print(data)
print(type(data))
print(data[0]['name'])
print(data[1]['name'])
import json
json_list=[{
"name":"Bob",
"birthday":"2001.1.1"
},{
"name":"Aike",
"birthday":"2001.2.2"
}]
data=json.dumps(json_list)
print(data)
print(type(json_list))
print(type(data))
json文件的存储
import json
json_list=[{
"name":"Bob",
"birthday":"2001.1.1"
},{
"name":"Aike",
"birthday":"2001.2.2"
}]
open('data.json','w',encoding='utf-8').write(json.dumps(json_list))#我们可以把json对象转换成字符串存入文件
open('data.json','w',encoding='utf-8').write(json.dumps(json_list,indent=2))#如果想保存json对象的格式,我们可以添加一个参数,代表缩进字符个数
CSV文件
csv文件存储
import csv
# 1. 创建文件对象
f = open('data.csv', 'w', encoding='GBK',newline="")#newline参数设置用于不会出现空行间隔
# 2. 基于文件对象构建 csv写入对象
csv_writer = csv.writer(f)
# 3. 写入csv文件内容
csv_writer.writerow(['name','birthday'])#写入一行信息
csv_writer.writerows([['Bob','123'],['Aike','456']])#写入多行信息,此时参数为二维列表格式
使用delimiter
参数可以修改列与列之间的分隔符,如下设置空格为分隔符
csv_writer = csv.writer(f,delimiter=' ')
关系数据库存储
MySQL存储
连接并创建数据库
import pymysql
def create_db():
db = pymysql.connect(host='localhost', user='root', password='', port=3306)
cusor = db.cursor()
cusor.execute('select version()')
data = cusor.fetchone()
print('Database version:', data)
cusor.execute('create database aaa DEFAULT CHARACTER SET utf8mb4')
db.close()
if __name__ == '__main__':
create_db()
- 由于当前的MySQL运行在本地,所以host为localhost,否则就设置成你要连接的公网ip地址;
- 用户名为root,密码自己填入
- 运行的端口默认为3306
连接成功后,我们需要再调用 cursor()方法获得MySQL的操作游标,利用游标来执行SQL语句。
- cusor.execute(‘select version()’)用于获得当前安装在本机的MySQL版本;
- data = cusor.fetchone()调用 fetchone()方法获得第一条数据,也就得到了版本号。
- cusor.execute(‘create database test DEFAULT CHARACTER SET utf8mb4’)执行创建数据库的操作,数据库名叫作aaa,默认编码为utf8mb4,这个编码规则支持中文显示。
创建数据表
def create_table():
db = pymysql.connect(host='localhost', user='root', password='', port=3306, db='aaa')
cusor = db.cursor()
sql = 'create table if not exists books(id VARCHAR(255) NOT NULL, title VARCHAR(255) NOT NULL,author VARCHAR(255) NOT NULL, date VARCHAR(255), PRIMARY KEY (id))'
cusor.execute(sql)
db.close()
数据插入
ef gener_book_insert():
db = pymysql.connect(host='localhost', user='root', password='', port=3306, db='aaa')# 连接数据库
cursor = db.cursor()# 获得游标
data = {
'id': '201801',
'title': 'Python',
'author': 'Sam',
'date': '2016/05'
}
table = 'books'
keys = ','.join(data.keys())
values = ','.join(['%s'] * len(data))
sql = 'insert into {table}({keys}) VALUES({values})'.format(table=table, keys=keys, values=values)
try:
if cursor.execute(sql, tuple(data.values())):
print('insert successful')
db.commit()
except Exception as e:
print("insert failed!", e)
db.rollback()
db.close()
首先,需要构造插入的字段 id
、 title
、 author
和date
。这里只需要将data
的键名拿过来,然后用逗号分隔即可。所以 ', '.join(data.keys()) 的结果就是 id, title, author, date
,然后需要构造多个 %s
当作占位符,有几个字段构造几个即可。如,这里有4个字段,就需要构造%s, %s, %s,%s
。这里首先定义了长度为1的数组 ['%s']
,然后用乘法将其扩充为 ['%s', '%s', '%s', '%s']
,再调用 join() 方法,最终变成 %s, %s, %s, %s 。最后,我们再利用字符串的 format() 方法将表名、字段名和占位符构造出来。最终的SQL语句就被动态构造成了:
insert into books(id, title, author, date) values(%s, %s, %s, %s)
接下来执行execute()
方法的第一个参数传入 sql 变量,第二个参数传入 data
的键值构造的元组,就可以成功插入数据了
传入多条数据
def gener_book_insert():
data = [
{
'id': '201801',
'title': 'Python',
'author': 'Tom',
'date': '2016/05'
},
{
'id': '201802',
'title': 'Android',
'author': 'Tom',
'date': '2016/08'
},
{
'id': '201803',
'title': 'PHP',
'author': 'Sam',
'date': '2018/05'
}
]
table = 'books'
db = pymysql.connect(host='localhost', user='root', password='', port=3306, db='test')
cursor = db.cursor()
for item in data:
keys = ','.join(item.keys())
values = ','.join(['%s'] * len(item))
sql = 'insert into {table}({keys}) VALUES({values})'.format(table=table, keys=keys, values=values)
try:
if cursor.execute(sql, tuple(item.values())):
print('insert successful')
db.commit()
except Exception as e:
print("insert failed!", e)
db.rollback()
db.close()
注意到没,data已经不是之前的字典了,而是一个list列表了,列表中包含有3个字典,同时我们将插入的部分代码也进行了微调,使用迭代对list中的数据进行遍历取出所需数据进行逐条插入到数据库。