文件的操作流程
- 打开
- 对文件进行操作
- 关闭
- 打开文件open()
open(file, mode=‘r’, buffering=None, encoding=None, errors=None, newline=None, closefd=True) - 文件操作read()输出字符串类型、write()等
- 关闭close()
F_obj = open(r'F:\python文档\yddaily.txt',mode='a') #mode=a追加模式 w写 r读
F_obj.writelines(daily+'\n') #写入内容
F_obj.close() #关闭
with open…as 操作
此操作可以避免因为忘记关闭文件而占用内存。操作完文件后,自动关闭文件。
with open(file='fileTest.txt',mode='r',encoding='gbk') as f:
content = f.read()
print(content)
print(f)#<_io.TextIOWrapper name='fileTest.txt' mode='r' encoding='gbk'>
f.read()#报错,因为已经关闭了
打开模式mode
'r' 读 (default)
'w' 写
'x' 创建新文件,有则报错 FileExistsError
'a' 末尾追加内容,若文件不存在,则创建文件,文件存在,追加内容
'b' 二进制
't' 文本模式 (default)
'+' open a disk file for updating (reading and writing)
'U' universal newline mode (deprecated)
读操作
- f.read()
可以引入一个参数,指定读取的size,默认是-1读取所有,如果文件比较大,建议传入size。
@abstractmethod
def read(self, n: int = -1) -> AnyStr:
pass
with open(file='fileTest.txt',mode='r',encoding='gbk') as f:
content = f.read(1) 读取1个字符 gbk模式 1个英文与一个汉字 长度都为1
content1 = f.read(2) 接着从读取的位置往下读取
print(content,content1)
案例 读取文本长度80,直到读取完毕,退出
with open(file='fileTest.txt',mode='r',encoding='gbk') as f:
content = ''
c = 80
while True:
txt = f.read(c)
if txt:
content += txt
else:
break
print(content)
- f.readline()读取一行
with open(file='fileTest.txt',mode='r',encoding='gbk') as f:
content = f.readline()
print(content)
- f.readlines()读取多行,装入一个列表
每行以换行结尾
写操作f.write(),writelines()
模式w,r+,a,x都可以写
- f.wirte()
@abstractmethod
def write(self, s: AnyStr) -> int:
pass
写入hello world到aaa.txt文件。
用的x模式,使用该模式时当前目录aaa.txt文件不能存在,否则报错
用a模式可以创建和追加
with open(file='aaa.txt',mode='x') as f:
f.write('hello world')
- f.writelines()
写入多行,传入列表
@abstractmethod
def writelines(self, lines: List[AnyStr]) -> None:
pass
with open(file='aaa.txt',mode='a') as f:
f.writelines(['hello\n','hello1'])
二进制文件
图片,音频,视频等。b
1. 读取rb
with open(file='Kalimba.mp3',mode='rb') as f:
print(f.read(100)) 这里的100表示100个字节B,文本类型表示长度
2. 读取音频文件,并写入新文件
with open(file='Kalimba.mp3',mode='rb') as f:
c = 1024*100 定义读取的文件size100KB
with open('abc.mp3','wb') as f1:
while True:
content = f.read(c) 循环每次读取100KB
if content:
f1.write(content) 写入到abc.mp3
else:
break
读取文件位置
f.tell() 方法用来检查当前读取的位置
@abstractmethod
def tell(self) -> int:
pass
f.seek()
@abstractmethod
def seek(self, offset: int, whence: int = 0) -> int:
pass
offset
参数whence:0 从头开始 默认
1 从当前位置
2 从最后位置计算
文件其他操作OS
os.listdir()输出文件
os.chdir(‘d:’) 改变目录
print(os.getcwd()) 输出当前路径
os.mkdir(‘abc’) 创建目录
os.rmdir(‘abc’) 删除目录