很多软件都会有有对文件处理的功能。今天我们就来学习文件处理。
文件处理
打开文件时,需要指定文件路径和以何等方式打开文件,打开后,可以将结果赋值给一个变量,这个变量我们称为句柄。这样我们就可以通过这个句柄对此文件进行操作。使用后关闭。
# f=open('文件路径','打开方式',encoding='字符编码') #f为文件句柄 # print('+++++>1',f.read()) #输出全部 # print(type(data)) # print('+++++>2',f.read()) #空 # print('+++++>3',f.read()) #空 # f.close() #文件关闭 # print(f) #可用 # f.read() #不可用 # del f #仅删除f句柄
回收资源
1 f.close():一定要做,关闭操作系统打开的文件,即回收操作系统的资源
2 del f:没必要做,因为在python程序运行完毕后,会自动清理与该程序有关的所有内存空间
文件打开模式
打开文件的模式有:
r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】
#文本文件:只读模式,文件不存在报错 f=open('aaaa.py','r') print(f.read()) #读所有 print(f.readline(),end='') #读行 print(f.readlines()) #读所有将每行放到数组中 print(f.readable()) #判断是否可读 print(f.writable()) #False f.close() #关闭
w,只写模式【不可读;不存在则创建;存在则清空内容】
#文本文件:只写模式,文件不存在则创建空文件,文件存在则清空 f=open('new.txt','w') f.write('1111111\n') #写入 f.writelines(['22222\n','3333\n','444444\n']) #写入三行 print(f.writable()) #判断是否可写入 f.close()
a, 追加模式【可读; 不存在则创建;存在则只追加内容】
#文本文件:只追加写模式,文件不存在则创建,文件存在可追加内容 # f=open('new_2','a',encoding='utf-8') # print(f.readable()) #False # print(f.writable()) #True # f.write('33333\n') # f.write('44444\n') # f.writelines(['5555\n','6666\n']) # f.close()
"+" 表示可以同时读写某个文件
r+, 读写【可读,可写】
#可写可读 打开文件的时候文件就为空,写的是任意内容,读的是刚刚写进去的内容 #要想读,先移动光标 #读的光标和写的光标是两回事 f = open('复习.py','w+',encoding='utf-8') f.write('12237yuiayi') #seek 制定光标的位置在0位置 f.seek(0) print(f.read(3)) f.write('kahkshldkhd') print('***',f.read()) f.close()
w+,写读【可读,可写】
#可读可写 f = open('复习.py','r+',encoding='utf-8') print(f.read()) f.write('\najshdjkdjk') f.close()
a+, 写读【可读,可写】
#追加可读 f = open('复习2.py','a+',encoding='utf-8') f.seek(0) print(f.read())
"b"表示以字节的方式操作
rb
#rb f=open('aaaa.py','rb') print(f.read().decode('utf-8')) f=open('1.jpg','rb') data=f.read()
wb
#wb f=open('2.jpg','wb') f.write(data) f=open('new_3.txt','wb') f.write('aaaaa\n'.encode('utf-8'))
ab
#ab f=open('new_3.txt','ab') f.write('aaaaa\n'.encode('utf-8'))
此方式的操作可以对一些非字节文件做操作比如说图片,视频等任意文件。
文件的光标移动
read(3):
1. 文件打开方式为文本模式时,代表读取3个字符
2. 文件打开方式为b模式时,代表读取3个字节
用只读方式和只写方式打开文件光标都在首,追写方式打开在尾。想要自己移动光标只能借助seek(光标位置)方法实现
上下文管理
#上下文管理 with open('aaaa.py','r',encoding='utf-8') as read_f,\ open('aaaa_new.py','w',encoding='utf-8') as write_f: #一行太长可以用\来将一行分成两行或多行但本质还是一行 data=read_f.read() write_f.write(data) #不需要关闭(即不用close)此格式会自动关闭 #with open() as 句柄,open() as 句柄 : #可以一次打开多个 # 对文件的操作
循环每一行
with open('a.txt','r',encoding='utf-8') as f: while True: line=f.readline() if not line:break print(line,end='') lines=f.readlines() #只适用于小文件 print(lines) data=f.read() print(type(data)) for line in f: #推荐使用 print(line,end='')
文件的修改
#方式一:只适用于小文件 import os #导入os模块 with open('a.txt','r',encoding='utf-8') as read_f,\ open('a.txt.swap','w',encoding='utf-8') as write_f: data=read_f.read() write_f.write(data.replace('alex_SB','alex_BSB')) os.remove('a.txt') #移除 os.rename('a.txt.swap','a.txt') #重命名 #方式二: import os with open('a.txt','r',encoding='utf-8') as read_f,\ open('a.txt.swap','w',encoding='utf-8') as write_f: for line in read_f: write_f.write(line.replace('alex_BSB','BB_alex_SB')) os.remove('a.txt') os.rename('a.txt.swap','a.txt') #OS模块简单的来说它是一个Python的系统编程的操作模块,可以处理文件和目录这些我们日常手动需要做的操作。