文件操作
文件操作基础
1.数据持久化
背景:程序中数据默认保存在运行内存中的,保存在运行内存中的数据在程序运行结束后会被销毁。如果程序中的数据在程序结束后不销毁必须将数据通过文件的形式保存到磁盘中。
数据持久化又叫数据本地化,就是将程序中的数据存储到文件中的过程
常见的数据持久化工具:数据库(.db、.sqlite)、json文件、plist文件、csv文件、excel文件、txt文件等
2.文件操作
操作的是文件内容
基本操作的基本流程:打开文件 ->操作文件(读、写) -> 关闭文件
2.1打开文件
open(file,mode=‘r’,encoding=None)
以
1)file:需要打开的文件的路径(可以是绝对路径,也可以是相对路径)
注意:相对路径如果是./开头,./可以省略
2)mode:由两组值来文件打开方式,决定打开文件后能干什么,操作文件的时候数据的类型是什么类型。
第一组(决定能干什么):r、w、a;
r:只读,如果文件不存在会报错
w:只写,会清空原文件内容,如果文件不存在会自动创建文件
a:只写,不会清空原文件内容,如果文件不存在会自动创建文件
+:读写,使用方法:r+、w+、a+
第二组(决定数据类型):t、b使用的时候必须在每一组值中选一个,如果第二组值没选,相当于选的t,例如’rt’、‘r’、‘rb’、‘br’、‘wt’
t:字符串
b:字节(二进制数据)
打开文本文件可以用t也可以用b;二进制文件只能用b打开
3)encoding
文件编码方式(文本文件文字存储的时候采用的字符集),只有在以t方式打开文件的时候才需要设置encoding,一般赋值为’utf-8’
‘utf-8’ -> 数字、字母使用1个字节;中文采用3个字节;表情符号采用两个字节
‘gbk’ -> 中文采用4个字节
2.2操作文件
1)读文件:
文件对象.read():从读写位置开始读取到文件结束(获取整个文件内容),返回值就是文件内容
文件内容.readline():从读写位置开始读到一行结束,文件必须是文本文件
f = open('a.txt')
result = f.read()
print(result)
f.seek(0) #将读写位置移动到文件开头
result = f.read()
print(result)
f.seek(0) #将读写位置移动到文件开头
2)写操作
文件对象.write(数据):将指定的数据写入指定文件
2.3关闭文件
文件操作完之后要关闭文件:文件对象.close
防止忘记关闭文件的方法1:
result = open('a.txt').read()
print(result)
防止忘记关闭文件的方法2:
with open('a.txt') as f:
result = f.read()
print(result)
数据持久化
1.数据持久
第一步:确定需要持久化的数据
第二步:创建文件并且确定文件初始内容
第三部:可以在程序中需要这个数据的时候从文件中读 这个数据
第四不:当这个数据发生改变以后需要将最新的数据写入文件中
练习1:写程序打印程序执行次数
try:
count = int(open('count.txt',encoding='utf-8').read())
except FileNotFoundError:
count = 0
count += 1
print(count)
open('count.txt','w',encoding='utf-8').write(str(count))
练习2:写程序添加学生并且打印已经添加过的学生
第1次运行程序:
请输入学生姓名:小明
小明
第2次运行程序:
请输入学生姓名:小花
小明 小花
name = input("请输入学生姓名:")
open('student.txt','a',encoding='utf-8').write(f'{name} ')
reslut = open('student.txt','r',encoding='utf-8').read()
print(reslut)
# 练习3:写程序添加学生,并且打印已经添加过的所有学生
“”"
第1次运行程序:
请输入学生姓名: 小明
[小明]
第2次运行程序:
请输入学生姓名: 小花
[小明, 小花]
name = input("请输入学生姓名:")
try:
all_student = eval(open('student1.txt',encoding='utf-8').read())
#['小明']
except FileNotFoundError:
all_student = []
#在列表中添加新的名字
all_student.append(name) #['小明','小花']
print(all_student)
#将改变后的列表写入文件
open('student.txt','w',encoding='utf-8').write(str(all_student))
print(len(all_student))
# 练习4:写程序添加学生,并且打印已经添加过的所有学生
“”"
请输入学生姓名: 小明
请输入学生电话: 110
请输入学生专业: 电子信息
[
{‘name’: ‘小明’, ‘tel’: ‘110’, ‘major’: ‘电子信息’}
]
请输入学生姓名: 小花
请输入学生电话: 119
请输入学生专业: 服装设计
[
{‘name’: ‘小明’, ‘tel’: ‘110’, ‘major’: ‘电子信息’},
{‘name’: ‘小花’, ‘tel’: ‘119’, ‘major’: ‘服装设计’}
]
“”"
name = input("请输入学生姓名:")
tel = input("请输入学生电话:")
major = input("请输入学生专业:")
try:
all_student = eval(open('student2.txt',encoding='utf-8').read())
except FileNotFoundError:
all_student = []
all_student.append({'name':name,'tel':tel,'major':major})
print(all_student)
open('student2.txt','w',encoding='utf-8').write(str(all_student))