一、打开文件
文件的操作步骤:
• 打开文件
• 对文件进行各种操作(读、写)然后保存
• 关闭文件
文件会有一个返回值。返回一个对象,这个对象就表示的是当前的文件。
先在桌面创建一个两行内容为‘刘亦菲’‘刘德华’的txt文件,如图:
调用open()来打开一个文件,可以将文件分为2中类型
• 一种 纯文本文件(使用utf-8编码编写的文件)
• 一种 二进制文件(图片 mp3 视频…)
open()打开文件时,默认是以文本文件的形式打开的。
1、open()函数
open(file, mode=‘r’, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
常用形式是接收两个参数:文件名(file)和模式(mode)
使用 open() 函数一定要保证关闭文件对象,即调用 close() 函数。
参数说明:
file: 必需,文件路径(相对或者绝对路径)。
mode: 可选,文件打开模式
buffering: 设置缓冲
encoding: 一般使用utf8
errors: 报错级别
newline: 区分换行符
closefd: 传入的file参数类型
opener:
mode 参数有:
模式 描述
t 文本模式 (默认)。
x 写模式,新建一个文件,如果该文件已存在则会报错。
b 二进制模式。
打开一个文件进行更新(可读可写)。
U 通用换行模式(不推荐)。
r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。
r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。
w 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
w+ 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
默认为文本模式,如果要以二进制模式打开,加上 b 。
例如:
file_name=r'C:\Users\01\Desktop\test.txt'#绝对路径obj=open(file_name)#open返回对象就是当前打开的这个文件file_namecontent=obj.read()#对这个打开的文件进行读写等操作print(content)obj.close()obj.read()
结果:
报错,即表示文件关闭状态不能读。
2、with()函数(上下文管理器),不用写close()来关闭,它自带关闭。
file_name=r'C:\Users\01\Desktop\test.txt'with open(file_name) as f:content=f.read()print(content)f.read()
结果:
3、一般会结合着try except使用
file_name=r'C:\Users\01\Desktop\1.txt'try:with open(file_name) as f:content=f.read()print(content)except:print(f'{file_name}文件不存在')
结果:
4、文件的读取
(1)通过read()来读取文件的内容
• 通过read()读取文件内容时会将文件中所有的内容全部读取出来。
• read()可以接收一个size作为的参数,该参数用来指定要读取字符的数量。默认值为-1.-1也就是要读取全部的内容。如果字符的数量小于size,则会读取所有的;如果读取到最后的文件,则会返回空串。
• 每次读取都会从上次读取到的位置开始(并覆盖掉上一次的)。
(2)较大文件的读取
• 如果对于读取的文件比较大的话。一次性的将文件加载到内容中,容易导致内存泄露。所以对于较大的文件,不要直接调用read()
• readline() 该方法用来读取一行(并覆盖掉上一次的)
• readlines() 该方法用于一行一行的读取内容,它会一次性将读取到的内容封装到一个列表当中返回。
file_name=r'C:\Users\01\Desktop\test.txt'try:with open(file_name) as f:content=f.read(2)print(content)except:print(f'{file_name}文件不存在')
结果:
file_name=r'C:\Users\01\Desktop\test.txt'try:with open(file_name) as f:content=f.read(2)content=f.read(2)#覆盖掉上一次的读取print(content)except:print(f'{file_name}文件不存在')
结果:
5、对于覆盖的处理
file_name=r'C:\Users\01\Desktop\test.txt'try:with open(file_name) as f:for i in range(2):content=f.readline()print(content)except:print(f'{file_name}文件不存在')
结果:
6、写入
write()来向文件中写入内容
• 该方法可以分多次向文件写入内容
• 写入完成之后该方法会返回写入的字符的个数
使用open()函数打开文件时,必须要指定打开文件要做的操作(读、写、追加)。如果不指定操作类型,则默认是读取文件,而读取文件是不能向文件中写入
• r 表示只读
• w表示可以写。使用w写入文件时,如果文件不存在则会创建一个文件。如果文件存在则会覆盖原文件内容。
由上图可知,txt文件中原有的内容被覆盖掉了。
7、二进制文件的读写操作
二进制文件:指视频、音频、图片等。
读取文本文件时,size是以字符为单位。读取二进制文件时,size是以字节为单位。
我们用wb来写入二进制文件。
file_name=r'C:\Users\01\Desktop\文末.jpg'with open(file_name,'rb') as f:content=f.read()print(content)
结果:
又如: