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