文件的知识:打开文件、操作文件、关闭文件
1、关于打开文件:
f.open('text','r')#r代表只读
f.open('text','w')#w代表只写,先清空源文件的内容
f.open('text','x')#文件存在即报错,文件不存在则创建文件,并可写入内容(即同w)
f.open('text','a')#a代表在源文件末尾追加内容
案例1:读文件内容的程序
f=open('db','r')
data=f.read()
print(data)
f.close()
案例2:encoding限制文件内容形式
#读文件内容出来,如果打开文件时出现乱码,需要看下encoding对应的类型是否真错
#比如text文件中有汉字,则必须写上encoding='utf-8'
f=open('text','r',encoding='utf-8')
data=f.read()
print(data)
f.close()
案例3:加b后,直接以字节方式读取文件,不加b则以字符串形式读取
f=open('db','rb')#当r为rb时,会以字节方式读取文件
data=f.read()
print(data,type(data))
f.close()
案例4:当传递内容为字符时,需要通过bytes转化
f=open('db','ab')#会以字节方式追加
f.write(bytes("hello",encoding='utf-8'))#当传递内容为字符时,需要用bytes转化
f.close()
案例5:r+即可读又可写,同时不会覆盖文件,会在末尾追加内容
f=open('db','r+',encoding='utf-8')#即可读又可写
data=f.read()
print(data)
f.write("hello")#在末尾覆盖
f.close()
执行结果:
另外还有a+(实现读和写,但写的时候会永远在最后追加),w+(实现写和读,但会清空源文件内容后在写),因此用的最多的是r+
2、关于文件的操作
seek()#将按字节形式读取指针位置,中文代表3个字节
tell()#获取当前指针的位置,按字节形式
案例6:调整指针位置
f=open('db','r+',encoding='utf-8')#即可读又可写
data=f.read(1)#如果打开模型无b,则read按字符读取,如果有b,则按字节方式,比如中文会占3个字节
print(f.tell())#tell()当前指针所在的位置,无论是否有b,均按字节形式
f.seek(f.tell())#可调整当前指针的位置
f.write("888")
f.close()
案例7:flush#强刷,当没有结束程序时,需要把写的内容强制刷进内存
f=open('db','a')
f.write("123")
f.flush()#强制把123内容写入硬盘中
input("hhh")
案例8:truncate,用来截断数据
f=open('db','r+',encoding='utf-8')#即可读又可写
f.seek(3)#调整到3字节
f.truncate()#3字节后的所有内容全部清空
f.close()
其他:readline,仅读取一行
3、关闭文件
可以用f.close(),还可以用with执行完自动关闭
withopen('db')asf:
input("hhh")
案例9:读取第一个文件的前世行,并写入到第二个文件
withopen('db','r')asf1,open('db2','w')asf2:
times=
forlineinf1:#一行一行的读取
times+=1
iftimes
f2.write(line)
else:
break
案例10:修改一个文件,替换部分内容
withopen('db','r')asf1,open('db2','w')asf2:
forlineinf1:
new_str=line.replace("aaa","cc")
f2.write(new_str)
领取专属 10元无门槛券
私享最新 技术干货