数据持久化(文件操作)
计算机存储数据
默认情况下程序中的数据是保存在运行内容中,当程序运行结束后后,在运行内存中保存的数据会自动销毁;
如果希望在这次运行程序的时候可以使用上一次运行程序产生的数据,就必须把数据保存在硬盘(磁盘)中。
硬盘保存数据的最小单位是文件
文件操作 - 操作文件内容
基本流程:打开文件 ->文件读写操作 -> 关闭文件
1)打开
open(file,mode=‘r’,*,encoding=None) - 以指定的方式打开指定的文件,返回一个文件对象
参数1:file - 需要打开的文件路径(文件路径可以写绝对路径,也可以写相对;路径)
绝对路径:文件在计算机中的全路径(windows从盘开始写的路径)
相对路径:在写文件路径的时候可以用’.‘代表当前目录或者’…'代表当前目录的上次目录
(当前目录指当前代码文件所在的文件夹)
注意:如果要使用相对路径,被打开的文件必须放在工程中;
如果路径是以 .\开头的,可以省略不写
参数2:mode - 文件打开方式,用来决定:打开文件之后能做什么(能读还是能写)、操作文件的时候数据对应的类型(是字符串还是二进制)
给mode赋值的时候需要两组值:
第一组:决定打开后能做什么对应的值
‘r’ - 只读
‘w’ - 只写:打开的时候会清空原文件内容,打开不存在文件不报错,会创建文件
‘a’ - 只写:打开后在原文的基础上后面写内容,打开不存在文件不报错,会创建文件
第二组:决定操作文件的时候数据的类型
‘t’ - 字符串
‘b’ - 二进制(bytes)
赋值的时候上面两组值每一组都必须选择一个(如果第二组值不选,就相当于选择的t)
参数3:encoding - 文本文件编码方式(只有在以t方式打开文件的时候,才需要设置encoding)
一般赋值为**’utf-8**’,'gbk’也是常见编码方式
区别在于两者中gbk只会有中文和ASCII编码表,存中文时时2个字节方式存入的
而utf-8存中中文是3给字节存进去的。
虽然gbk存中文更节省内存,但是gbk只会存中文和ASCII编码表
utf - 8 :在文本数据存储的时候,ASCII编码表中符合用1个字节来存储,一个中文用3个字节存储,可以对任何符合编码
gbk:文本数据在存储的时候,ASCII表中符号用1个字节来储存,一个中文用2个字节存储。除了ASCII表和中文以外不能对其他符号进行编码
使用编码值得原则:存储数据的时候使用编码值要和获取数据的时候对应的编码值一致
# 1.路径写法
open(r'H:\pythonProject就业\文件操作‘\files\abc.txt')
open(r'.\files\abc.txt')
#在当前pycharm中创建一个文件夹叫files,该文件夹中创建一个abc.txt的文件
#2.打开方式
# =======r是只读===
f = open(r'.\files\abc.txt','r')
f.read()
#f.write('123') 报错
#=======w是只写,并且会清空原文件===
f = open(r'.\files\abc.txt','w')
f.write('123')
#f.read() 报错
# =======a是只写,不会清空原文件===
f = open(r'.\files\abc.txt','a')
f.write('123')
#f.read() 报错
# =======t对应的类型是字符串===
f = open(r'.\files\abc.txt', 'rb')
result = f.read()
print(type(result), result)
# 3.设置encoding
f = open('files/student.txt', 'w', encoding='utf-8')
f.write('abc你好啊')
2)文件读写操作
1.文件读操作:
文件对象.read() - 获取整个文件内容(从读写位置开始,读到文件结束。读写位置默认在文件开头,随着读操作的进行读写位置会不断改变)
文件对象.readline() - 获取一行内容(只能文本文件有效)
文件对象.readlines() - 获取整个文件内容,返回一个列表,列表中的元素事每一行内容
2.文件写操作:
文件对象.write(数据)
文件对象.wtite(列表)
# ===========文件读操作==========
f = open('files/abc.txt',encoding='utf-8')
result = f.read()
print(result)
# ==========
f = open('files/abcd.txt', 'w', encoding='utf-8')
f.write('hahah')
f.writelines(['pyhon','jave'])
3)关闭文件
文件对象.close()
f.close()
文件操作实战
1.数据持久化步骤:
1)确定需要持久化的数据
2)创建保存需要持久化数据的文件
3)确定文件初始内容(就是需要持久化的数据的初始值)
4)在程序中需要这个数据的时候从文件中获取这个数据
5)在程序中修改这个数据后,必须讲最新的数据写入到文件中
案例:写程序打印程序运行次数
with open('runCount.txt', 'r', encoding='utf-8') as count1:
count = int(count1.read())
count += 1
print(count)
with open('runCount.txt', 'w', encoding='utf-8') as new_count:
new_count.write(f'{str(count)}')