什么事文件:应用程序提供一种操作硬盘的抽象单位
为什么要用文件:用户、应用程序对文件读写操作系统转换成具体的硬盘操作,所以用户、应 用程序通过简单地读写文件,间接的控制哦复杂的应聘的存取操作,实现将内存中对的数据永久保存到硬盘中
如何用文件
用这种形式打开文件
with open ('text.txt','r',encoding='utf8') as f
第一个元素文件名,第二个:三种模式——r(只读),w(只写),a(追加),[同时还有两种文件的处理模式:t(处理大部分文档<默认>)与b(处理音频,图片,转换为Bytes)模式]
r模式:(只读模式)文件不存在,报错,文件存在指针跳到文件的开头
w模式:(只写模式)文件不存在创建文件,文件存在清空文件,文件指针自然跑到开头
a模式:(追加模式)文件不存在时会创建文档,文件存在文件指针移动到最后
w与a的异同:
1,相同:在打开文件不关闭的情况下,连续写入,新写的内容总会跟到前面的内容之后,
2,不同点:以A模式重新打开文件不会清空文件内容,会将文件指针已到末尾,新内容添加到最后
t , b 模式不能单独使用,必须与r/w/a其中一个联合使用
默认t:文本模式:
1.读写文件都是以字符串为单位
2.只能针对文本文件
3,必须指定encoding参数
b:二进制模式
1.读写文件都是二进制为单位
2.可以针对所有文件
3.一定不能指定encoding参数
对比:
1.操作文本文件时候T模式帮我们省去了编码解码的环节,
2,对于非文本:音频,视频等职能使用B模式
操作——如何用:
f.read ()一次性读取所有内容,文件指针移到文件末尾
f.readline()一次性读取一行内容,贯标移动到第二行开头
f.readlins()读取每一行内容,返回列表
为了防止内存溢出
用以下两种方法:
一
with open ('a.txt','r',encoding = "utf8")as f:
for line in f:
print(line,end='')
二
with open ('1.mp4','rb') as f:
while True:
data = f.read (1024)#每次只读取1024个bytes到内存中
if len (data) == 0:
break
print(data)
f,readable()#是否可读
f.writable()#是否可写
主动控制文件内指针移动:
seek(x,y),x--->字符相对偏移动,y---->模式选择(0模式:指针从文件开头开始移动,1,模式:指针从当前位置开始移动,2模式:指针从文件尾开始移动)
with open( 'b.txt','r',encoding='utf8')as f: f.seek(3,0) print(f.tell())#返回指针在的位数,bytes print(f.read())
with open( 'b.txt','rb')as f: f.seek(3,1) print(f.tell())#返回指针在的位数,bytes
f.seek(3, 1)
print(f.tell()) # 返回指针在的位数,bytes
with open ('b.txt','rb')as f: f.seek(0,2) print(f.tell()) f.seek(-3,2) print(f.read().decode('utf8')) 文件修改 方式一:读取文件,再打开文件写入修改后的文件 with open ('b.txt','r',encoding='utf8') as f: date = f.read() with open('b.txt','w',encoding='utf8')as f: f.write(date.replace('qw','ACE')) 方式一:利用OS模块,直接删除以前的文件夹,替换文件名 import os with open ('b.txt','r',encoding='utf8')as rf, open ('b_b.txt','w',encoding='utf8')as wf: for line in rf: wf.write(line.replace('ACE','TANK')) os.remove('b.txt') os.rename('b_b.txt','b.txt')