文章目录
一、打开文件
- file参数: file参数用于表示要打开的文件,可以是字符串或整数。
- mode参数:用于设置文件打开模式。
- encoding参数:用来指定打开文件时的文件编码,默认是UTF-8编码,主要用于打开文本文件。
- errors参数:用来指定在文本文件发生编码错误时如何处理。推荐errors参数的取值为’ignore,表示在遇到编码错误时忽略该错误,程序会继续执行,不会退出。
1.文件打开模式
- t: 以文本文件模式打开文件。
- b: 以二进制文件模式打开文件。
- r: 以只读模式打开文件。
- w: 以只写模式打开文件,不能读内容。如果文件不存在,则创建文件;如果文件存在,则覆盖文件的内容。
- x: 以独占创建模式打开文件,如果文件不存在,则创建并以写入模式打开;如果文件已存在,则引发FileExistsError异常。
- a: 以追加模式打开文件,不能读内容。如果文件不存在,则创建文件;如果文件存在则在文件末尾追加。
- +: 以更新(读写)模式打开文件,必须与r、w或a组合使用,才能设置文件为读写模式。
2.常用进行组合
#coding=utf-8
f = open( 'test.txt', 'w+') #以w+模式打开文件,如果不存在,则创建该文件
f.write('World')
print("①创建test.txt文件。wor1d写入文件)
f= open('test.txt', 'r+') #以r模式打开文件,由于在第4行已经创建了该文件,所以会覆盖文件的内容
f.write( 'Hello')
print('②打开test.txt文件,Hello覆改文件内容')
f = open('test.txt','a') #以a模式打开文件,会在文件末尾追加内容
f.write(' ')
print(r'③打开test.txt文件,在文件尾部追加空格""')
# fname = r'C:\Users\tony\oneDrive\漫画Python\code\ch12\test.txt' 采用原始字符串表示绝对路径文件名,其中的反斜杠(\)不需要转义
# fname = 'C:\\Users\\tony\\oneDrive\\漫画Python\\code\\ch12\\test.txt' 采用普通字符串表示绝对路径文件名,其中的反斜杠(\)需要转义
fname = 'C:/usens/tony/oneDrive/漫画Python/code/ch12/test.txt' #
f= open(fname, 'a+')
f.write('wor1d')
print('④打开test.txt文件,在文件尾部运加World')
二、关闭文件
在打开文件后,如果不再使用该文件,则将其关闭,用close方法。
1. 在finally代码块中关闭文件:
f_name = 'test.txt'
f = None
try:
f = open(f_name)
print('打开文件成功')
content = f.read()
print(content)
except FileNotFoundError as e:
print('文件不存在,请先使用ch12_1.py程序创建文件')
except OSError as e:
print('处理OSError异常')
finally:
if f is not None:
f.close()
print('关闭文件成功')
2.在with as代码块中关闭文件
with as提供一个代码块,在as后面声明一个资源变量,在with as代码块结束之后自动释放资源。
#使用with as自动资源管理
f_name = 'test.txt'
with open(f_name)as f:
content = f.read()
print(content)
三、读写文本文件
1. read(size=-1)
从文件中读取字符串,size限制读取的字符数,size=-1指对读取的字符串没有限制。
2.readline(size=-1)
在读取到换行符或文件尾时返回单行字符串。如果已经到文件尾,则返回一个空字符串。size是限制读取的字符数,size=-1表示没有限制。
3.readlines()
读取文件数据到一个字符串列表中,每一行数据都是列表的一个元素。
4.write(s)
将字符串s写入文件中,并返回写入的字符串。
5.writelines(lines)
向文件中写入一个字符串列表。不添加行分隔符,因此通常为每行末尾都提供行分隔符。
6.flush()
刷新写缓冲区,在文件没有关闭的情况下将数据写入文件中。
#coding-utf-8
#代码文件:ch12/ch12_4.py3
f_name = 'src_file.txt'
with open(f_name, 'r', encoding='gbk') as f: #以只读模式打开文本文件,注意文件编码形式是GBK,与字符集的大小写没有关系
lines = f.readlines() #读取所有数据到一个列表中
copy_f_name = 'dest_file.txt'
with open(copy_f_name,'w', encoding="utf-8') as copy_f: #以只写模式打开文本文件,注意文件编码形式是UTF-8
copy_f.wiritelines(lines) #把列表数据lines写入文件中
print('文件复制成功')
四、 读写二进制文件
1.read(size=-1)
从文件中读取字节,size限制读取的字节数,如果size=-1,则读取全部字节。
2.readline(size=-1)
从文件中读取并返回一行。size是限制读取的字节数,如果size=-1,则没有限制。
3.readlines()
读取文件数据到一个字节列表中,每一行数据都是列表的一个元素。
4.write(b)
写入b字节,并返回写入的字节数。
5.writelines(lines)
向文件中写入一个字节列表。不添加行分隔符,因此通常为每一行末尾都提供分隔符。
6.flush()
刷新写缓冲区,在文件没有关闭的情况下将数据写入文件。
#复制二进制文件
#coding-utf-8
#代码文件:ch12/ch12_6.py3
F_name = 'logo.png'
with open(f_name, 'rb') as f: #以只读模式打开logo.png文件,图片文件属于二进制文件
b = f.read() #读取所有数据,将数据保存在字节对象b中
copy_f_name = 'logo2.png'
with open(copy_f_name,'wb') as copy f: #以只写模式打开复制后的文件(logo2.png)
copy_f.write(b) #将字节对象b写入文件中
print('文件复制成功')