Day14 文件读写
1. 数据持久化
1.1 计算机存储数据
默认情况下程序中的数据是保存在运行内存中的,当程序运行结束后对应运行的程序会自动销毁。
如果希望在这次运行程序的时候可以使用上一次运行程序产生的数据,就必须将数据保存在硬盘或磁盘中。
硬盘保存数据的最小单位是文件。
1.2 数据持久化
将数据以文件的形式保存在磁盘中
怎么将程序中的数据放到文件中?
怎么在程序中获取文件的内容?
答案:文件操作
1.3 文件操作
操作文件内容
基本流程:打开文件 -> 文件读写操作 -> 关闭文件
1)打开文件
open(file, mode=‘r’, *, encoding=None) - 以指定的方式打开文件,返回一个文件对象
- 参数1:file —— 需要打开的文件路径(绝对路径/相对路径)
a. 绝对路径:文件在计算机中的全路径(windows从盘开始写的路径)
b. 相对路径:在写文件路径的时候用”.“开头代表当前目录或”…“开头代表当前目录的上级目录。(当前目录指的是当前代码文件所在的文件夹)
注意:如果要使用当前路径,被打开的文件必须在工程中,如果路径是./开头的,那./可以省略不写
-
参数2:mode —— 文件打开方式,用来决定打开文件之后能做什么(能读还是能写)、操作文件的时候数据对应的类型(是字符串还是二进制)
给mode赋值的时候需要两组值:
*第一组:*是决定文件打开后能做什么
r —— 只读:打开不存在的文件会报错!
w —— 只写:打开的时候会清空原文件内容;打开不存在的文件不会报错,并且会自动创建这个文件
a —— 只写:打开的时候不会清空原文件的内容*第二组:*决定操作文件的时候数据的类型
t —— 字符串
b —— 二进制(bytes)赋值的时候上面两组值每一组都必须选择一个(如果第二组值不选,就相当于选的是’t’):
rt(tr)、rb(br)、r、wt、wb、w、at、ab、a -
参数3:encoding —— 文本文件编码方式(只有在以t方式打开文件的时候,才需要设置encoding)
一般赋值为’utf-8’,'gbk’也是一种常见的文件编码方式
utf-8:在文本数据在存储的时候,ascii表示符号用一个字节来存储,一个中文用3个字节来存储,可以对任何符号编码
gbk:在文本数据在存储的时候,ascii表示符号用一个字节来存储,一个中文用2个字节。除了ascii表和中文以外不能对其他符号进行编码使用编码值的原则:存储数据的时候使用的编码值要和获取数据的时候对应的编码值一致。
2)文件读操作
- 文件对象.read() —— 获取整个文件内容(从读写文件开始,读到文件结束。读写位置默认在文件开头,随着读操作的进行读写位置会不断改变)
- 文件对象.readline() —— 获取一行内容(只有文本文件有效)
- 文件对象.readlins() —— 获取整个文件内容,返回一个列表,列表中的元素是每一行的内容(只有文本文件有效)
3)文件写操作
- 文件对象.write(数据)
- 文件对象.writelines(数据)
4)关闭文件
- 文件对象.close()
2. 文件操作实战
2.1 数据持久化步骤:
1)确定需要持久化的数据
2)创建保存需要持久化的数据的数据
3)确定文件初始内容(就是需要持久化的数据的初始值)
4)在程序中需要这个数据的时候从文件中获取这个数据
5)在程序中修改数据后,必须将最新的数据写入到文件中
案列:写程序打印程序运行次数
1)确定需要持久化的数据 - 运行数据
f = open('test/runCount.txt', encoding='utf-8')
count = int(f.read()) # 读出来是字符串的0
f.close()
count += 1
print(count)
2)在程序中修改数据后,必须将最新的数据写入到文件中
f = open('test/runCount.txt', 'w', encoding='utf-8')
f.write(str(count))
f.close()
运行两次后,文件runCount.txt的值得变化
练习:提示用户输入名字添加学生,添加完后打印已经添加过的所有的学生的名字
"""
# 第1次运行程序:
请输入你的名字: 小明
小明
# 第2次运行程序:
请输入你的名字:小花
小明 小花
# 第3次运行程序
请输入你的名字: 张三
小明 小花 张三
....
"""
1)确定需要持久化的数据 - 已经添加过的学生的名字
name = input('请输入您的名字:')
2)在程序中需要这个数据的时候从文件中获取这个数据
added_name = open('test/students', encoding='utf-8').read() + name
print(added_name)
3)在程序中修改数据后,必须将最新的数据写入到文件中
f = open('test/students', 'a', encoding='utf-8')
f.write(name+' ')
运行添加了姓名的students文件