5.文件存储

文件存储

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()

首先,需要构造插入的字段 idtitleauthordate。这里只需要将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中的数据进行遍历取出所需数据进行逐条插入到数据库。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值