1.数据持久化
程序中默认产生的数据是保存在内存中的,程序结束数据会自动销毁。如果希望程序结束后数据不消失,那么需要对这个数据做持久化
数据持久化:将数据文件保存到硬盘中
2.文件操作
基本步骤:打开文件 -> 操作文件(读/写) -> 关闭
1.打开文件
open(file, mode='r' ,encoding=None) - 以指定的方式打开指定文件,并且返回文件对象
说明:
file - 字符串,文件路径,可以写绝对路径也可以写相对路径
绝对路径:一般不用,完整路径例如:C:\Users\Darlingyou\Desktop\test1.txt
./ - 当前目录(当前py文件所在的目录)(./可以省略)
../ - 当前目录的上层目录
.../ - 当前目录的上层目录的上层目录
以此类推
注意:当前目录指的是当前代码所在文件对应的目录
mode - 字符串,文件的打开方式(决定打开后可以执行的操作)
'r' - 以只读的方式打开文件,文本读出来的是字符串类型
'w' - 以只写的方式打开文件,修改文件里面的内容,写入的数据是字符串
'rb'/'br' - 以只读的方式打开文件,读出来的数据是二进制数据
'wb'/'wr' - 以只写的方式打开文件,读出来的数据是二进制数
'a' - 以只写的方式打开文件,写入的是字符串(在源文件的最后添加内容)
encoding - 文件编码方式
'utf-8' - 支持中文
'gbk' - 只支持英文
注意: 只有文本文件才能设置encoding,二进制不能设置encoding
如果是以读的方式打开文件,文件不存在会报错
如果是以写的文件打开文件,文件不存在会自动创建
2.操作文件
1.读操作:文件对象.read() - 返回文件中的内容(从读写位置获取到文件结尾)
文件对象.readline() - 读一行内容
print('~~~~~~~~~~读文件~~~~~~~~')
test1 = open('test1.txt', mode='r', encoding=None)
a = test1.read()
print(a)
print('~~~~~~~~~~~~~读一行~~~~~~~~~~~~~~')
test2 = open('test2.txt', mode='r', encoding=None)
b = test2.readline() # 读一行
print(b)
print('~~~~~~~~~~~~~练习一行一行的读~~~~~~~~~~~~~~')
# 练习:读一个本地的txt文件中的内容,一行行的读,读完为止
test3 = open('test3.txt', mode='r', encoding=None)
while True:
c = test3.readline()
print(c)
if not c:
break
2.写操作:文件对象.write(内容),将内容写入指定文件
print('~~~~~~~~~~~~~写文件~~~~~~~~~~~~~~')
test4 = open('test4.txt', mode='w', encoding='utf-8')
d = test4.write('黄沙百战穿金甲')
d1 = test4.write('不破楼兰终不还')
f = open('test4.txt', 'w')
3.字节类型(bytes)
1.数据来源:
a.将其他类型转换成bytes:
整型和字符串可以转换成bytes
print('~~~~~~~~~~~~~字节类型转换~~~~~~~~~~~~~~')
print(bytes(10)) # 整型转bytes
print(bytes('你好!', encoding='utf-8')) # 字符串转换成bytes
print('你好!'.encode()) # 字符串转换成bytes
b1 = '你好!'.encode()
print('b1: ', b1)
str1 = str(b1, encoding='utf-8')
print('str1:', str1)
str1 = b1.decode(encoding='utf-8')
print('str1:', str1)
4.二进制文件的读写
图片、视频、音频等都是二进制文件,这些文件只能以带'b'的方式打开然后操作
二进制读操作
image_f = open('1.jpg', 'rb')
image_data = image_f.read()
print(type(image_data))
二进制写操作
n_f = open('new.jpeg', 'wb')
n_f.write(image_data)
关闭文件 文件名.close()
3.json数据格式
1.什么是json数据
满足ison格式要求的数据就是json数据;文件内容满足json格式需求,就是json文件
- json格式要求:a.一个json中有且只有一个数据 b.这个必须是json支持的数据类型的数据
2.json支持的数据类型:
数字类型(number) - 所有的数字(整数和小数),并且支持科学计数法
字符串(string)- 使用双引号引起来的字符集,支持转义字符
布尔(boolean) - json中只有true 和 false
数组(array) 相当于python中的列表,必须是json支持的数据类型
字典(dictionary) - 相当于python中的字典,key只能是双引号引起来的,值任意
null - 相当于 None,空值
2.python数据和json数据的相互转换Python中内置了一个json模块,用来支持json相关操作
1.json转python
json python
数字 int/float
字符串 str,有可能将双引号变成单引号
布尔 true - True,false - False
数字 list
字典 dict
null None
- json.loads(字符串,encoding=编码方式) - json字符串转换成 python对应的数据
注意:字符串中的内容必须是json格式的数据(去掉字符串最外面的引号,本身就是一个json数据)
result = json.loads('"abc"', encoding='utf-8')
print(result)
result = json.loads('[12, true, "abc", null]', encoding='utf-8')
print(result, type(result))
3.python数据转json
"""
python 转 json
int/ float 数字
bool 布尔,True - true, False - false
str 字符串,单引号变双引号
list/tuple 数组
dict 字典
None null
"""
# json.dumps(数据) - 将python数据转换成json格式的字符串
results = json.dumps([12, True, 'abc', None])
print(results, type(results))
results1 = json.dumps({12: 23, 'name': '张三'})
print(results1, type(results1))