一、数据持久化
问:为什么要数据持久化?
持久化将程序数据在持久状态和瞬时状态转化的机制
将瞬时状态(内存中的数据,是不能永久保存)转换为持久数据(硬盘中的数据,能够长久保存)
持久化的应用是将内存中的对象存储在硬盘、数据库等位置
二、文本文件的读写模式
1. 使用Python打开一个文件:open方法
语法:open(参数1, 参数2, 参数3, …)
参数2:mode —— 文件打开的读写方式
注意:文件的读或者写不能同时进行
2. 文件打开的模式
w:只写,先清空内容再写入内容,如果文件不存在,先创建,再写入
a: 只写,直接在文件末尾追加写,如果文件不存在,先创建,再写入
r: 只读,如果文件不存在,报错
3. 打开文件以后操作文件的数据类型
t: 读写的数据类型必须是文本(text)
b:读写的数据类型必须是二进制(bytes)
上述两种模式各选其一组合使用
例如:wt、 tw、 at、 ta、 rt、 tr等等
二进制文件(图片、音频、视频等)必须以b模式打开,文本文件等要用t模式打开
三、文本文件的写操作
1. open方法的使用
open方法用于打开一个文件并返回被打开的这个文件对象
open(参数1,参数2,参数3,…)
参数1:file —— 文件的路径以及文件名(文件路径分为相对路径和绝对路径,编程中仅仅使用相对路径)
参数2:mode —— 文件打开的读写模式
参数3:编码方式 —— encoding:一般将encoding写为utf-8,但是有些文件编码不是utf-8,而是gbk等编码
绝对路径:以盘符为参照物,对盘符来说文件的位置
相对路径:以某个文件为参照物,另一个文件的位置
3. 文本文件的写操作
①打开一个文件,如果文件不存在,创建文件
file = open('./古诗.text', 'wt', encoding='utf-8')
②向打开的文本文件中写入内容
file.write('静夜思\n')
file.write('唐.李白\n')
str_1 = '床前明月光,\n疑是地上霜,\n举头望明月,\n低头思故乡。\n'
file.write('str_1')
③关闭文件
file.close()
运行后系统生成一个古诗.text的文件,打开如下:

I/O operation on closed file.
I/O —— input / out
文件关闭之后不能再进行I/O操作
四、文本文件的读操作
①打开文件(读写同一个文件的编码方式需要保持一致)
file = open('古诗.text', 'rt', encoding='utf-8')
②读取数据
1.readline():每次只读取一行数据,字符串类型
data_1 = file.readline()
print(data_1)
运行结果:静夜思
2.read():能够将文件中的数据一次性读取出来
运行结果:床前明月光,
疑是地上霜,
举头望明月,
低头思故乡。
3.readlines():一次性将所有行读出来,每一行作为一个元素保存在列表中
data_3 = file.readlines()
print(data_3)
运行结果:['床前明月光,\n', '疑是地上霜,\n', '举头望明月,\n', '低头思故乡。\n', '\n']
4.关闭文件
file.close()
五、二进制数据的读写
电脑中的所有文件都是以二进制数据保存的。有些文件,例如word、ppt、txt、pdf这些文件,里面保存的信息是供人阅读的,人接受的是文本、十进制等,所以这些信息是经过计算机处理的
相比于文本文件的读写,二进制数据的读写不用encoding,且只能使用b
1.二进制文件的读
file = open('图片1.jpeg', 'rb')
data = file.read()
print(data)
file.close()
2.二进制文件的写
file1 = open('图片2.jpeg', 'wb')
file1.write(data)
file.close()
六、CSV文件的读写操作
①CSV文件的写操作
1. 导入csv模块
import csv
2.以utf-8编码和写模式创建或打开 “学生成绩.csv” 文件
wt / rt / at,涉及到文本文件类型的读写时,t可以省略不写
将newline改为’ ',是因为windows的换行定义是 \r \n,Mac定义的换行操作为 \r,Linux定义的换行操作为 \n
统一将newline改为’ ',抵消掉不同系统产生的换行影响
file = open('学生成绩.csv', 'w', encoding='utf-8', newline='')
3.使用csv模块中的writer类对文件对象进行写操作,返回一个具有写功能的writer对象
file_writer = csv.writer(file)
4.写入数据
writerow:单行写入,将一个列表看做一行数据,列表中的每个元素是这一行的单元格
writerows:多行写入,将一个二维列表中的每一个一维列表分别写入其对应的一行,一维列表中的每个元素对应这一行的单元格
columns = ['姓名', '性别', '年龄', '成绩']
students = [['小邱', '男', 21, 50], ['小王', '女', 23, 100], ['小曾', '女', 22, 100], ['小邹', '女', 25, 100]]
file_writer.writerow(columns)
file_writer.writerows(students)
file.close()
最后运行打开生成的学生成绩.csv文件,如下显示:

②CSV文件的读操作
1. 导入csv模块
import csv
2. 打开CSV文件
file = open('学生成绩.csv', 'r', encoding='utf-8')
3. 使用csv模块的reader类对文件进行读操作,返回包含有数据的一个可迭代对象
可迭代对象:能够遍历的数据对象
file_reader = csv.reader(file)
for row in file_reader:
print(row)
file.close()
运行结果:['姓名', '性别', '年龄', '成绩']
['小邱', '男', '21', '50']
['小王', '女', '23', '100']
['小曾', '女', '22', '100']
['小邹', '女', '25', '100']
通过观察发现,Pycharm打开的csv文件和txt文本文件几乎没有差别。
csv文件虽然是以表格的样式展示数据,但是csv文件的本质是文本文件。