20220613 文件操作学习总结

20220612 文件操作学习总结

一,数据持久化
1.数据持久化 - 将数据以文件的形式保存到磁盘中
程序中的数据默认存储在运行内存中,保存在运行内存中的数据在程序结束后,会被自动销毁,就会导致下一次运行程序的时候,无法使用上一次程序运行过程中产生的数据
如果希望这次运行程序还可以使用之前运行这个程序产生的数据,就必须将这个数据以文件的形式保存在硬盘中
(保存在硬盘中的数据,除非手动删除,或者磁盘损坏,数据会一直在)

2.数据持久化工具 - 文件
常见的文件:数据库文件(.bd, .sqlite等), excel , csv, json, 普通文本文件
二,文件操作
1.文件操作 - 操作内容
文件操作基本流程: 打开文件 -> 操作文件内容(读操作,写操作) -> 关闭文件
2.文件操作流程
1)打开文件

open(file,mode=‘r’,*,encoding=None) - 以指定的方式打开指定文件,返回一个文件对象.
a.file - 文件路径(文件在计算机中位置信息),分为绝对路径喝相对路径两种
1.绝对路径:
文件在计算机中的全路径.(注意,windows的绝对路径对应的字符串最前面加r)
2.相对路径
使用相对路径的前提:需要打开的文件必须在工程中
1)用.表示档期那目录(当前代码文件所在的文件夹)
2)用…表示当前目录的上层目录
注意:在写相对路径的时候,如果路径以’./‘开头,开头的’./'可以省略

b.mode - 文件打开方式(决定打开文件后是可以读还是可以写;决定操作文件内容的时候数据对应的类型)
第一组值 - 决定打开后的读写方式
r - 以只读的方式打开文件
w - 以只写的方式打开文件;打开的时候回直接清空源文件内容
a - 以只写的方式打开文件
第二组值 - 文件数据对应的类型
t - 数据对应的必须是字符串
b - 二进制类型的数据(bytes)
所有的文本文件既可以使用t打开,也可以使用b打开(一般用t打开)
但是二进制文件(图片,视频,音频,压缩包,pdf等)只能用b打开
c.encoding - 文本文件的解码或者解码方式
注意:只有在以t方式打开文件的时候才能设置encoding.
常见的文本文件编码方式:utf-8.gbk(建议使用utf-8)
使用原则:必须保证打开文件读数据的时候对应的编码方式和打开文件写入数据的时候对应的编码方式一致.
给参数mode赋值的时候,必须在两组数据中每一组选一个值,第二组值可以不选,不选默认是t
赋值的实际写法:r(rt,tr),br,rb,w(wt,tw),wb,bw,a(at,ta),ab,ba

2)操作文件

a.文件读操作 - 获取文件内容
文件对象.read() - 获取文件所有内容(从读写位置开始,读到文件结束)
文件对象.readline - 读一行(从读写位置开始,读到一行),只能读文本文件;
文件对象.readlines() -
b.文件写操作
文件对象.write(data) - 将数据写入指定的文件中

a.手动关闭文件:
操作文件:
文件对象.close()

b.自动关闭文件:

with open() as 文件对象:
    操作文件

三,文件操作的具体应用
1.数据持久化方法
第一步:确定需要持久化的数据是什么?
第二部:创建用来保存数据的文件(清楚文件的名字和类型,文件的位置)
第三步:设置文件的初始内容
第四步:做到在程序中需要数据的时候(需要持久化数据的时候),从文件中都这个数据
如果这个数据在程序中发生了改变,必须将最新的数据写入到文件中.

案例:写一个程序,打印程序运行的次数
#程序执行的次数就是需要持久化的数据
#获取上一次运行程序的次数

with open(r'.\files\count.txt','r',encoding= 'utf-8') as f:
     count = int(f.read())
# 次数+1
count += 1
with open(r'.\files\count.txt','w',encoding= 'utf-8') as f:
	f.write(str(count))
#打印最新的次数
print(count)
# 提示用户输入学生姓名
# name = input('请输入学生的姓名')
# # 打印已经添加过的所有学生的姓名
# with open(r'files\names.txt','r',encoding='utf-8') as f:
#     all_students = f.read()
#
# alll_students = all_students + name
#
# with open(r'files\names.txt','a',encoding='utf-8') as f:
#     f.write(f'{name}{'   '}')
#     f.write('')
# print(alll_students)

练习1:写程序添加一个学生,并且打印当前已经添加过的所有学生的信息

name = input('请输入一个学生的名字:')
age = str(input('请输入该学生的手机号码'))
with open(r'files\names.txt','r',encoding = 'utf-8') as f:
    all_students = f.read()

all_students = all_students + name

with open(r'files\names.txt','a',encoding='utf-8') as f:
    f.write(name)

with open(r'files\names.txt','r',encoding= 'utf-8') as g:
    all_students = g.read()
all_students = all_students + age
with open(r'files\names.txt','a',encoding='utf-8') as g:
    g.write(age)
    g.write('  ')
print(all_students)


# name = input('请输入学生的姓名:')
# tel = input('请输入学生的电话')
#
# with open(r'.\files\student.txt', 'r', encoding='utf-8') as f:
#     all_students = f.read()
# print(all_students)
# print(name, tel)

# with open(r'files\student.txt', 'a', encoding='utf-8') as f:
#     f.write(f'{name} {tel}\n')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Denis_1412

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值