文件操作
1.计算机的存储数据
默认情况下:程序中的数据是保存在运行内存中,当程序运行结束,在运行内存中保存的数据会自动销毁。如果希望再次运行程序的时候可以使用上一次程序产生的数据,就必须包数据保存再硬盘中。
硬盘保存数据的最小单位就是文件。
2.数据持久化
以文件为单位将数据保存在硬盘中
3.怎么将程序中的数据保存到文件中?怎么在程序中获取文件中的内容?
方法:文件操作
4.操作文件内容
基本流程:打开文件----->文件读写操作----->关闭文件
1)打开
open(file,mode=“r”,encoding=None)--------以指定的方式打开指定的文件,返回一个文件对象
file-----需要打开的文件路径
参数一:路径:绝对路径、相对路径
绝对路径:文件在计算机的全路径(win:从盘开始)
open( r’\E:\BaiduSyncdisk\前锋学习\第三周\dakai) rE:\BaiduSyncdisk\前锋学习\第三周\dakai)-----有问题
相对路径:用点’.'代表当前目录,用"…"代表当前目录上层目录
(当前代码文件时当前代码文件所在的文件夹)
注意:如果要使用相对路径,被打开的文件必须放在工程中
open(‘.’)----有问题
如果路径是以"./"开头的,'./'可以省略
参数二:文件打开方式-------用来确定打开文件后能做什么(能读还是能写)、操作文件的时候对应的数据的类型(是字符串还是二进制类型)
给modle赋值的时候需要两组值:
第一组:决定打开后能做什么的对应的值
r ----只读
w-----只写(打开的时候会清空原文件)
a-----只写 (在原文件基础上,后面追加新的内容)
第二组:决定操作文件的时候数据的类型
t----字符串
b----二进制(bytes)
赋值的时候上面两组值每一组都必须选择一个(如果第二组值不选,就相当于选的是"t")
rt, rb ,tr
#r是只读
f=open('./flies/abc/txt',"r")
f.read( )-----可以操作
f.write("123")-----不能操作
#w只写,且清空
f=open('./flies/abc/txt',"w")----打开的时候就清空
f.write("123")
#a只写,不会清空原文件
f=open('./flies/abc/txt',"a")
f.write("123")
#t的类型是字符串
f=open('./flies/abc/txt',"rt")
result=f.read( )
print(type(result))
参数三:encoding-------文本文件编码方式(只有在以t方式打开文件的时候,才需要设置encoding)
一般赋值为:“utf-8”,"gbk"也是一种常见的编码方式
utf-8:(文本数据在存储的时候,ascii表中用一个字节,汉字为3个字节,可以对任何符号编码)
gbk:文本数据在存储的时候,ascii表中用一个字节,汉字为2个字节。除了ascii表与中文以外,不能对其他符号编码
使用编码值的原则:存储数据的时候使用编码值要和获取数据对应的编码值一致
3.设置encoding
f=open( './flies/abc/txt','w',encoding='utf-8')
乱码出错的原因:不是数据有问题,是编码方式不一样。
文件读操作
1.文件对象 .read( )-----获取整个文件内容(从读写位置开始,读到文件结束。读写位置默认在文件开头,随着读操作的进行读写位置会不断改变)
f=open('./0102/text.txt',encoding="gbk")
result = f.read()
print(result)
2.文件对象.readline( )----获取一行内容(只有文本文件有效)
f=open('./0102/text.txt',encoding="gbk")
result = f.readline()
print(result) #123你好abc
result = f.readline()
print(result) #sadadasd
result = f.readline()
print(result) #sadasfas
f.seek(0) #让读写位置移动到文件开头
f.seek(0)
result = f.readline()
print(result)
3.文件对象.readlines()-----获取整个文件内容,返回一个列表,每行内容就是一个元素(只有文本文件有效)
f=open('./0102/text.txt',encoding="gbk")
result = f.readlines()
print(result)
#['123你好abc\n', 'sadadasd\n', 'sadasfas']
3.文件写操作
方法一:文件对象.write(数据)
f=open('./0102/text.txt',"a",encoding="gbk")
f.write("1234abc")
方法二:文件对象.writelines(列表)
f=open('./0102/text.txt',"a",encoding="gbk")
f.writelines(['1','2','3'])
4.关闭文件
文件对象.close( )-----文件加密
f=open('./0102/text.txt',"a",encoding="gbk")
f.close( )
5.文件操作的运用
数据持久化
1)、确定需要持久化的数据
2)、创建保存需要持久化数据的文件
3)、确定文件初始内容(需要持久化的数据的初始值)
4)、在程序中需要这个数据的时候从文件中获取整个数据(读)
5)、在程序中写修改数据后,必须将最新的数据写入到文件中(写)
#写程序打印程序运行次数
1)、确定需要持久化的数据------运行次数count
2)、创建保存需要持久化数据的文件----count1.txt
3)、确定文件初始内容(需要持久化的数据的初始值)----在文件中保存初始值为0
f = open('./0102/count.txt', encoding='utf-8')
count1 = int(f.read())-----文件读取的结果就是次数
count1 += 1
print(count1)
# 5)在程序中修改数据后,必须将最新的数据写入到文件中
f = open('./0102/count.txt', 'w', encoding='utf-8')
f.write(str(count))
f.close()
#先读数据,读完后,在添加次数,在写进文件
#练习:提示用户输入名字添加学生,添加完后打印已经添加过所有学生的名字
"""
第一次运行:
输入:小明
小明
第二次运行:
输入:小花
小花
第三次运行:
输入:张三
张三
"""
1.确定持久化数据
2.创建文件
3.初始值----None
4.获取
name=input("请输入你的名字")
#在程序中需要整个数据的时候从文件中获取整个数据
f=open("./0102/count.txt",encoding="utf-8")
name1=f.read()+name #字符串加法
print(name1)
#修改数据
f=open("./0102/count.txt","w",encoding="utf-8")
f.write(name1)
#先显示,再存储数据