计算机存储数据
默认情况下程序中的数据是保存在运行内存中的,当程序运行结束后,对应的数据会自动销毁。
如果希望在这次运行程序的时候可以使用上一次运行程序产生的数据,就必须把数据保存在硬盘(磁盘)中。
数据持久化
硬盘保存数据的最小单位是文件。
定义:将数据以文件的形式将数据保存在硬盘当中。
怎么讲程序中的数据保存到文件中?怎么在程序中获取文件中的内容?
答:文件操作
文件操作:操作文件内容
基本流程:打开文件—》文件读写操作—》关闭文件
1)打开
open(file,mode='r',*,encoding=None) 以指定的方式打开指定文件,返回一个文件对象
参数 | 说明 |
---|---|
file | 需要打开的文件路径(绝对路径或相对路径);绝对路径:文件在计算机中的全路径(windows从盘开始写路径);相对路径:在写文件路径的时候可以用’.‘开头代表当前目录或者’…'开头代表当前目录的上级目录(当前目录指当前代码文件所在的文件夹) |
mode | 文件打开方式,用来决定:打开文件之后能做什么(能读还是能写)、操作文件的时候数据对应的类型(是字符串还是二进制)。给mode赋值的时候需要两组值:1)决定打开后能做什么对应的值(r只读、w只写(打开的时候会先清空原文件)、a只写(追加))。2)决定操作文件的时候数据的类型(t字符串、b二进制(bytes))。赋值的时候上面两组值每一组都必须选择一个(如果第二组值不选,就相当于选的是’t’) |
encoding | 文本编码方式(只有在以t方式打开文件的时候,才需要设置encoding),一般赋值为’utf-8’,'gbk’也是一种常见的文本编码方式。utf-8文本数据在存储的时候,ascii表中的符号用1个字节来存储,一个中文用3个字节存储。可以对任何符号进行编码。gbk文本数据在存储的时候,ascii表中的符号用1个字节来存储,一个中文用2个字节存储。除了ascii和中文以外,不能对其他符号进行编码。使用编码值的原则:存储数据的时候使用编码值要和获取数据的时候对应的编码值一致。 |
注意:如果要使用相对路径,被打开的文件必须放在工程中。如果路径是以’./‘开头的,’./'可以省略。
r打开不存在的文件会报错!
w、a打开不存在的文件不会报错,会创建一个新文件。
# r只读
file=open('test','r',encoding='utf-8')
print(file.read())
print(file.write('123')) #报错
# w只写
file=open('test','w',encoding='utf-8')
file.write('123')
file.read() #报错
# a只写
file=open('test','a',encoding='utf-8')
file.write('123')
file.read() #报错
utf-8:存储字母数字用1个字节,存储中文的时候一个中文对应3个字节。
gbk:存储字母数字用1个字节,存储中文的时候一个中文对应2个字节。
2)文件读写操作
文件读操作
文件对象.read() 获取整个文件内容(从读写位置开始,读到文件结束。读写位置默认在文件开头,随着读操作进行读写位置的改变),返回一个字符串
文件对象.readline() 获取一行内容(只对文本文件有效),返回一个字符串
文件对象.readlines() 获取整个内容,返回一个列表,列表中的元素是每一行的内容(只对文本文件有效)
seek(0)让读写位置移动到文件开头。
文件写操作
文件对象.write(数据)
文件对象.writelines(数据)
3)关闭文件
文件对象.close()
数据持久化步骤:
1)确定需要持久化的数据
2)创建保存需要持久化数据的文件
3)确定文件初始内容(就是需要持久化的数据的初始值)
4)在程序中需要这个数据的时候从文件中获取这个数据
5)在程序中修改数据后,必须将最新的数据写入到文件中
🌰提示用户输入名字添加学生,添加完后打印已经添加过的所有的学生的名字。
# 1)确定需要持久化的数据 - 已经添加过的学生的名字
name = input('请输入你的名字:')
# 4)在程序中需要这个数据的时候从文件中获取这个数据
added_name = open('student.txt', encoding='utf-8').read() + name
print(added_name)
# 5)在程序中修改数据后,必须将最新的数据写入到文件中
f = open('student.txt', 'a', encoding='utf-8')
f.write(name+' ')
字典推导式:
{表达式1:表达式2 for 变量 in 序列}
{表达式1:表达式2 for 变量 in 序列 if 条件语句}