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