1、文件的打开:
open()函数
open(file,mode='r',buffering=-1,encoding=None,errrors=None,newline=None,closefd=True,opener=None)
file参数:(1)字符串:指文件路径 (2)整数:文件描述符,一个已经打开的文件或者其他流
mode参数:
这些模式可以组合:
文本文件:rt\wt\xt\at (t可以省略,t是默认的),r+/w+/a+/x+
二进制文件:rb\wb\xb\ab,rb+\wb+\xb+\ab+
注意:r+\w+\a+的区别,r+打开文件时如果文件不存在则抛出异常,文件存在则清除文件内容写入;w+打开文件时如果文件不存在则创建文件,文件存在则清除文件内容写入;a+类似w+打开文件时如果文件不存在则创建文件,文件存在则在文件末尾追加。
buffering参数:(1)buffering=-1系统自动设置缓冲区 (2)buffering=0,关闭缓冲区 (3)buffering>0设置缓冲区
encoding参数:打开文件的编码集
errors参数:编码方式错误时的处理方式
newline参数:换行模式
closefd参数:file参数值为整数时这个参数和opener就有用了
opener参数:
f=open('test.txt','w+') #最开始没有test.txt这个文件,运行程序后生成test.txt文件并写入world
f.write('world')
f=open('test.txt','r+') #‘word’被‘Hello’覆盖,这里r+和w+样。。。
f.write('Hello')
f=open('test.txt','a') #尾部追加一个空格
f.write(' ')
f=open('test.txt','a+') #尾部追加一个World,现在变成:Hello World
f.write('World')
fname=r'E:\navy_lu\python\seleniumproject\testscript\test.txt' #r''代表原始字符串,这与正则的区别 和联系
f=open(fname,'w+') #文件内容变成WorldWorld
f.write('WorldWorld')
2、文件的关闭:
close()函数
fname='textfile.txt'
try:
f=open(fname,'r+') #不要用w+,w+会清空文件
except OSError as e:
print('打开文件失败')
else:
try:
content=f.read()
print(content)
except OSError as e:
print('读取文件失败')
finally:
print("释放文件资源")
f.close()
#############使用with ...as ...代码块
with open(fname,'r+') as f:
try:
content=f.read()
print(content)
except OSError as e:
print('读取文件失败')
运行结果:
hello
释放文件资源
hello
3、文本文件读写
文本文件读写的单位是字符,而且字符是有编码的,读写方法如下:
read(size=1),从文件中读取字符串 ,size表示读取的字符串的大小,size=-1代表没有限制
readline(size=-1),读取单行字符串 ,size表示读取的字符串的大小,size=-1代表没有限制
readlines(hint=-1)读取多行字符串,hint表示行数,hint=-1表示不限制行数
write(s),将字符串s写入文件,返回写入的字符数
writelines(lines),向文件中写入一个列表,不添加分隔符,每一行末尾提供分隔符
flush()刷新缓冲区,会把缓冲区中的内容写入文件
fname='textfile.txt'
with open(fname,'r',encoding='utf-8') as f: #读写文件指定字符集很重要
lines=f.readlines()
print(lines)
copy_f_name='copy.txt'
with open(copy_f_name,'w',encoding='utf-8') as co:
co.writelines(lines)
print('复制文件成功')
运行结果:
['hello大家好']
复制文件成功
#copy.txt文件成功复制了textfile.txt文件中的内容
4、二进制文件读写
二进制文件读写的单位是字节,不需要考虑编码的问题,二进制文件读写的方法和文本文件相同:
read(size=1),从文件中读取字节 ,size表示读取的字节的大小,size=-1代表没有限制
readline(size=-1),读取并返回一行 ,size表示读取的字节的大小,size=-1代表没有限制
readlines(hint=-1)读取文件数据到一个列表,hint表示行数,hint=-1表示不限制行数
write(b),将字节b写入文件,返回写入的字节数
writelines(lines),向文件中写入一个列表,不添加分隔符,每一行末尾提供分隔符
flush()刷新缓冲区,会把缓冲区中的内容写入文件