day14 文件操作
一、导入原理:
-
在导入模块的时候系统进入到模块中将模块中的全部代码执行一遍
-
在这个if语句中的代码只会在直接执行当前模块的时候执行,在被别的模块导入的时候不会执行
if __name__ == '__main__':
names=['哈利波特','夏目友人帐','红磨坊']
二、计算机数据存储:
1、计算机内存
- 运行内存,硬盘
- 运行内存存储数据以进程为单位,程序运行结束数据会被自动释放
- 保存在硬盘中的数据一旦保存,除非手动删除或者硬盘损坏,否则一直存在
2、数据持久化
- 也叫数据本地化,指的就是将程序中的数据保存在硬盘中,(数据默认保存在运行内存中)
- 硬盘保存数据的单位是文件;如果想要把数据保存在硬盘中就需要把数据保存的文件中
- 文件夹不具备保存数据的能力只是对文件进行归类
3、文件操作
-
操作文件的基本步骤:
打开文件 --> 操作文件内容(读操作、写操作) --> 关闭文件
三、打开文件
- 语法:open(文件路径, 文件打开方式=‘r’, encoding=文本文件编码方式)
1、文件路径
-
文件在计算机中的位置信息
-
文件路径分为两种:绝对路径、相对路径(一般将要使用的文件放入项目中)
-
绝对路径:文件在计算机中的全路径
-
相对路径:
-
注意:
使用像对路径之前需要先将被操作的文件放在工程目录中,
a. 在写路径的时候用.表示当前目录(当前写代码文件所在的目录所在的文件夹)
b. 在写路径的时候用…表示当前文件的上层目录
-
-
# 绝对路径
path=r'D:\001.qianfeng\学习总结\day13模块、包、异常捕获.md'
open(path)
# 相对路径
path=r'.\file1\text.xtx'
open(path)
2、文件打开方式
-
文件的打开方式决定了打开文件后能干什么(是能读还是能写)
-
还决定操作文件的时候数据的类型(是字符串还是二进制)
- 第一组值:r、w、a
- r - 只读,如果文件不存会报错
- w - 只写,打开的时候会先清空原文件,文件如果不存在程序不会报错,会创建一个文件
- a - 只写,在原文件的后面写新的东西,不会清空原文件,文件如果不存在程序不会报错,会创建一个文件
- 第二组值:t、b
- t - 字符串类型(读到的数据、写入文件的数据必须是字符串)
- b - 二进制类型(读到的数据、写入文件的数据必须是二进制)
- 第一组值:r、w、a
-
给打开方式赋值的时候必须在两组值中每一组选一个值,如果第二组值不选就默认 t
-
tr 、rb、wt、wb、at、ab(顺序可颠倒)
-
r - 只读
f=open(r'file1\text.xtx','r')
f.read()
f.write('abc') # io.UnsupportedOperation: not writable
- a - 只写,在原文件的后面写新的东西,不会清空原文件
f=open(r'file1\text.xtx','a')
# f.read() # io.UnsupportedOperation: not readable
f.write('abcd')
- w - 只写,打开的时候会先清空原文件
f=open(r'file1\text.xtx','w')
f.write('abc')
# f.read() # io.UnsupportedOperation: not readable
open(r'file1\data.txt','w')
3、文件编码方式
-
不同的文本文件编码方式在保存同一个符号的编码值符号不同
-
常见的文本文件编码方式:utf-8(推荐)、gbk
- utf-8: 数字字母采用一个字节保存,中文采用3个字节保存
- gbk: 数字和字母采用一个直接保存,一个中文采用2个字节保存
-
使用编码方式的要求:
前后一致(存储数据的时候采用的编码值,必须和获取的数据采用的编码值一致)
f=open(r'file1\text.xtx' ,'wt',encoding='utf-8')
print(f.write('hellow,世界')) # 9写入内容的长度
f=open(r'file1\text.xtx' ,'rt',encoding='utf-8')
print(f.read()) # hellow,世界
# python软件默认utf-8
四、操作文件
1、文件读操作(回去文件内容)
-
a.文件对象.read()
- 获取整个文件内容(从读写位置(默认是文件开头)开始到文件结束)
-
b.文件对象.readline()
- 从读写位置开始到一行结束,只针对文本文件有效
-
注意:读操作会改变读写位置,
-
文件对象.seek(0) - 将读写位置移动到文件开头
2、文件写操作
- 包括增加内容、修改内容、删除内容
- 文件对象.write(内容)
- 将指定内容写入到指定文件中
3、关闭文件
- 文件对象.close()
f=open(r'file1\text.xtx','rt',encoding='utf-8')
result=f.read()
print(result) # 此时读写位置已经在文件结束的位置,如果再次读操作,不会有结果
f.seek(0)
print(f.readline())
print(f.readline())
五、应用
1、 数据持久化方法 -
-
让这次运行程序产生的数据,可以在下一次程序运行的时候使用
- 第一步:确定需要持久化的数据是什么
- 第二步:创建文件确定文件初始内容
- 第三步:做到在程序中需要这个数据的时候从文件中获取这个数据
- 第四步:做到如果数据发生改变,必须将新的数据更新在文件中
-
案例:写程序打印程序运行次数
f=open(r'file1\data.txt',encoding='utf-8')
count=int(f.read())
f.close()
# 让次数加1,
count+=1
# 打印次数
print(count)
# 更新文件内容
f=open(r'file1\data.txt','w',encoding='utf-8')
f.write(str(count))
- 练习 输入学生名字,显示所有学生姓名
f=open(r'file1\Name.txt','a',encoding='utf-8')
# name='input('请输入一个姓名:')'
# f.write(f' {name}')
f.close()
f=open(r'file1\Name.txt','r',encoding='utf-8')
result=f.read()
print(result)
f.close()
- 获取所有的学生信息
name=input('enter a name: ')
sex=input('enter sex: ')
age=input('enter age: ')
try:
f=open(r'file1\StudentImformation',encoding='utf-8')
all_student=eval(f.read())
f.close()
except FileNotFoundError:
all_student=[]
all_student.append({'name':name,'gender':sex,'age':age})
print(all_student)
f=open(r'file1\StudentImformation','w',encoding='utf-8')
f.write(str(all_student))
f.close()