数据存储——学习笔记

这篇博客详细介绍了数据存储的各种方式,包括TXT、JSON、CSV文件存储,以及MySQL、MongoDB和Redis的关系型与非关系型数据库存储。在文件存储中,讲解了TXT的简化写法和JSON的读写操作。对于数据库,讨论了MySQL的连接、创建表、插入、更新和查询数据,MongoDB的插入、查询和更新操作,以及Redis的连接与键操作。
摘要由CSDN通过智能技术生成

一、文件存储

TXT文件存储

打开方式

模式 说明
r 以只读模式打开文件。文件的指针将会放在文件开头。这是默认模式
rb 以二进制只读方式打开文件。文件的指针会放在文件开头。
r+ 以读写方式打开文件。文件的指针将会放在文件开头。
rb+ 以二进制读写方式打开文件。文件指针将会放在文件的开头。
w 以写入的模式打开文件。如果该文件已存在,则将其覆盖。如果该文件不存在则创建新文件。
wb 以二进制写入模式打开文件。如果文件已存在,则将其覆盖。如果该文件不存在,则创建新文件。
w+ 以读写方式打开文件。如果该文件已存在,则将其覆盖。如果该文件不存在,则创建新文件。
wb+ 以二进制读写模式打开文件。如果该文件已存在,则将其覆盖。如果该文件不存在,则创建新文件。
a 以追加方式打开文件。如果该文件已存在,文件指针将会放在文件结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,则创建新文件来写入。
ab 以二进制追加方式打开文件。如果该文件已存在,文件指针将会放在文件结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,则创建新文件来写入。
a+ 以读写方式打开文件。如果该文件已存在,文件指针将会放在文件结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,则创建新文件来读写。
ab+ 以二进制追加方式打开文件。如果该文件已存在,文件指针将会放在文件结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,则创建新文件来读写。

简化写法

使用with as语法。在with控制块结束时,文件会自动关闭,所以就不需要在调用close()方法了。

with open('文件名', '模式', encoding='utf-8') as file:
	file.write()

JSON文件存储

对象和数组

对象:在JavaScript中是使用花括号{}包裹起来的内容。数据结构为{key1: value1, key2: value2, …}的键值对结 构。在面向对象语言中,key为对象属性,value为对应的值。

数组:在JavaScript中是方括号[ ]包裹起来的内容,数据结构为[“java”, “javascript”, “vb”, …]的索引结构。

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

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

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

读取JSON

Python提供了JSON库来实现JSON文件的读写操作,可以调用JSON库的loads()方法将JSON文本字符串转换为JSON对象,可以通过dumps()方法将JSON对象转为文本字符串。

import json

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

print(type(str_))
data = json.loads(str_)
print(data)
print(type(data))


'''
结果:
<class 'str'>
[{'name': 'Bob', 'gender': 'male', 'birthday': '1992-10-18'}, {'name': 'Selina', 'gender': 'female', 'birthday': '1995-10-18'}]
<class 'list'>
'''

使用loads()方法将字符串转为JSON对象,由于最外层是中括号,所以最终的类型是列表类型。

可以使用索引来获取对应内容:

data[0]["name"]
data[0].get('name')

'''
Bob
Bob
'''

通过中括号加0索引,可以得到第一个字典元素,然后再调用其键名即可得到相应的键值。获取键值时有两种方式,一种是中括号加键名,另一种是通过get()方法传入键名,get()方法如果键名不存在则返回None

get()方法,还可以传入第二个参数:

data[0].get('age')
data[0].get('age', 25)

'''
结果:
None
25
'''

在原字典中该键名不存在,此时默认会返回None。如果传入第二个参数,那么在不存在的情况下返回改默认值。

注意:JSON数据需要用双引号来包围,不能使用单引号。若是一下情况则会报错:

import json

str_ = '''
[{
	'name': 'Bob',
	'gender': 'male',
	'birthday': '1992-10-18'
},{
	'name': 'Selina',
	'gender': 'female',
    'birthday': '1995-10-18'
}]
'''
data = json.loads(str_)


'''
结果:
json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes:
'''

从JSON文本中读取内容:

从data.json文本文件中读取。其内容是刚刚定义的JSON字符串,可以先将文本文件内容读取出来,然后再使用loads()方法进行转化:

import json

with open('data.json', 'r') as file:
    str_ = file.read()
    data = json.loads(str_)
    print(data)

输入JSON

调用dumps()方法将JSON对象转化为字符串格式。

将字符串,以json格式写入文本文件中:

import json

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

with open('data.json', 'w', encoding='utf-8') as file:
    file.write(json.dumps(str_))

另外,如果想保存JSON的格式,可以在家一个参数indent,代表缩进字符个数。示例如下:

with open('data.json', 'w', encoding='utf-8') as file:
    file.write(json.dumps(str_, indent=2))

另外,如果内容中包含中文,中文字符默认会变成Unicode字符,如果不想转为Unicode字符则需要使用ensure_ascii为False.

with open('data.json', 'w', encoding='utf-8') as file:
    file.write(json.dumps(str_, indent=4, ensure_ascii=False))

CSV文件存储

写入

列表写入
import csv

with open('data.csv', 'w', encoding='utf-8') as csv_file:
    writer = csv.writer(csv_file)
    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()方法,传入每行数据,列表形式。

列与列之间默认是逗号分隔,如果想修改分隔可以使用dellimiter参数

import csv

with open('data.csv', 'w', encoding='utf-8') as csv_file:
    writer = csv.writer(csv_file, delimiter=' ')
    writer.writerow(['id', 'name', 'age'])
    writer.writerow(['10001', 'Mike', '20'])
    writer.writerow(['10002', 'Bob', '22'])
    writer.writerow(['10003', 'Jordan', '21'])

同时写入多行可以使用writerows()方法:

import csv

with open('data.csv', 'w', encoding='utf-8') as csv_file:
    writer = csv.writer(csv_file, delimiter=' ')
    writer.writerow(['id', 'name', 'age'])
    writer.writerows([['10001', 'Mike', '20'], ['10002', 'Bob', '22'], ['10003', 'Jordan', '21']])

writerows()方法传入,一个列表,列表里面每行数据还是一个列表。

字典写入
import csv

with open('data.csv', 'w', encoding='utf-8') as csv_file:
    filednames = ['id', 'name', 'age']
    writer = csv.DictWriter(csv_file, fieldnames=filednames)
    writer
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值