day15学习总结
1. 计算机存储数据
- 默认情况下程序中的数据是保存在运行内存中的,当程序运行结束,在运行程序中中保存的数据会自动销毁。
- 如果希望在这次运行程序的时候可以使用上一次运行程序产生的数据,就必须把数据保存在硬盘(磁盘)中
- 硬盘保存数据的最小单位是文件
2. 数据持久化 - 将数据以文件的形式保存在硬盘中
- 怎么将程序中的数据保存到文件中?
怎么在程序后中获取文件中的内容?
答案:文件操作
3. 文件操作 - 操作文件内容
-
基本流程
1.打开文件
2.文件读写操作
3.关闭文件 -
打开文件
-
语法:
- open(file, mode=“r”, *, encoding=None) - 以指定的方式打开指定文件,返回一个文件对象
-
参数1:file - 需要打开的文件的文件路径(可以写绝对路径,也可以写相对路径)
- 绝对路径:文件在计算机中的全路径(Windows从盘开始写的路径)
- 相对路径:在写文件路径的时候,用“.“代表当前目录或者”…“代表当前目录的上层目录
- 当前目录:是指是当前代码文件所在的文件夹
- 注意:如果要使用相对路径,被打开的文件必须放在工程中。
-
参数2:mode - 文件打开方式,用来决定:打开文件之后能做什么(能读还是能写),操作文件的时候数据对应的类型(是字符串还是二进制)。
- 第一组:决定打开后能做什么对应的值
- r - 只读
- w - 只写 (打开的时候会先清空原文件)(打开不存在的文件不会报错,会自动创建一个新文件)
- a - 只写 (打开的时候不会清空原文件内容)(打开不存在的文件不会报错,会自动创建一个新文件)
- 第二组:决定操作文件的时候数据的类型
- t - 字符串
- b - 二进制(byts)
- 赋值的时候,每一组都必须选择一个(如果第二组值不选,默认选择的t)
- 第一组:决定打开后能做什么对应的值
-
encoding - 文本文件编码方式(只有在以t方式打开文件的时候,才需要设置encoding)
- 一般赋值为 utf-8, gbk 也只一种常见的文字编码方式
- utf-8 - 在文本数据存储的时候,ASCII变种的符号用1个字节来存储,存储字母数字用一个字节, 存储中文的时候一个中文对应3个字节。可以对任何符号编码
- gbk - 文本数据在存储的时候,ASCII表中符号用1个字节来存储,存储字母数字用1字节,存储中文的时候一个中文对应2个字节。除了ASCII表和中文以外不能对其他符号进行编码。
- 使用编码值的原则,存储数据的时候使用编码值要和获取数据的时候对应的编码值一致
-
举例说明:
# r只读 # f = open('../testfile/test1.txt','r') # f.read() # f.write() #报错 # w 只写,清空原文件 # f = open('../testfile/test1.txt','w') # f.write("wu") # 清空原文件内容,并写入wu # a 只写,不会清空原文件 # f = open('../testfile/test1.txt',"a") # f.write(" wus") # 不会清空原文件内容,并写入wu # f = open('../testfile/test2.txt','r') # 报错 # f = open('../testfile/test2.txt','w') # 打开不存在的文件不会报错,会自动创建一个新文件 # f = open('../testfile/test3.txt','a') # 打开不存在的文件不会报错,会自动创建一个新文件 # f = open('../testfile/test1.txt','w',encoding="utf-8") # f.write("hello,pim") # f = open('../testfile/test1.txt','r',encoding='utf-8') # result = f.read() # print(result)
-
-
文件读操作
-
语法1:文件对象.read() - 获取整个文件内容(从读写位置开始,读到文件结束,读写位置默认在文件开头,随着读操作的进行,读写位置会不断改变)
-
语法2:文件对象.readline() - 获取一行内容(只能文本文件有效)
-
语法3:文件对象.readlines - 获取整个文件内容,返回一个列表,类表中的元素是每一行内容(只能文本文件有效)
-
举例说明:
# 获取整个内容 # result = f.read() # print(result) # 获取一行 # result = f.readline() # print(result) # # f.seek(0) # 让读写位置移动到文件开头 # result = f.readline() # print(result) # result = f.readlines() # print(result)
-
-
文件写操作
-
语法1:对象.write(数据)
-
语法2:对象.writelines(数据)
f = open('../testfile/test1.txt','a',encoding="utf-8") # f.write("hello")
-
-
关闭文件
- 语法: 文件对象.close()
4. 文件操作的应用
-
数据持久化步骤:
- 确定需要持久化的数据
- 创建文件用来保存需要在持久化的数据的文件
- 确定文件初始化内容(就是需要持久化的数据的初始值)在程序中需要这个数据的时候,从文件中获取这个数据
- 在程序中需要这个数据的时候从文件获取这个数据
- 在程序中修改数据后,必须将新的数据写入到文件中
-
举例1:
# 写程序打印程序运行次数 f = open('../testfile/test2.txt',encoding="utf-8") count = int(f.read()) f.close() count += 1 print(count) f = open('../testfile/test2.txt','w',encoding="utf-8") f.write(str(count)) f.close()
-
举例2:
# 写入学生姓名,并能够打印出之前所写的 name = input("请输入学生名字:") f = open('../testfile/test3.txt','a',encoding='utf-8') f.write(name+" ") f.close() f = open('../testfile/test3.txt',encoding='utf-8') print(f.read()) f.close()