文件的读写在任何一门编程语言中,是非常重要的知识点。而python中,它对文件的操作非常简单,只需要使用open()函数来打开一个文件,获取到文件句柄,然后通过文件句柄就可以进行各种各样的操作了,但是根据打开模式的不同,能够执行的操作也会大有不同。通过open()函数打开文件操作完成后,要通过close()函数进行文件的关闭。
open()函数打开文件的常用格式如下,f为文件句柄:
f = open(文件名,mode='操作模式',encoding='编码格式')
完整的语法格式为:
f = open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
各参数说明如下:
file: 必需,文件路径(相对路径或者绝对路径)
mode: 可选,文件打开操作模式
buffering: 设置缓冲
encoding: 一般使用utf-8
errors: 报错级别
newline: 区分换行符
closefd: 传入的file参数类型
opener:用来实现自己定义打开文件方式
文件的常用操作模式有:
r:以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
w:打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
a:打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
r+:打开一个文件用于读写。文件指针将会放在文件的开头。
w+:打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
a+:打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
rb:以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。
wb:以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
ab:以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
r+b:以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。
w+b:以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
a+b:以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
文件对象:
文件对象使用open()函数来创建,即上述中的文件句柄f,以下列出文件对象常用的函数:
file.close():关闭文件。关闭后文件不能再进行读写操作。
file.read([size]):从文件读取指定的字节数,如果未给定或为负则读取所有。
file.write(str):将字符串写入文件,返回的是写入的字符长度。
file.flush():刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。
file.seek(offset[, whence]):移动文件读取指针到指定位置,file.seek(0)表示让光标回到开头。
针对文件操作模式的实例分析:
1、r模式:首先在当前目录下创建一个test01.txt文件,文件内容如下:
文件的r只读操作!
创建r模式下的python代码如下:
#encoding:utf-8f=open("test01.txt",mode="r",encoding="UTF-8")s=f.read()print(s)f.close()
运行以上代码,结果如下:
2、w模式:首先在当前目录下创建一个test_w_02.txt文件,文件内容如下:
好好学习,天天向上!
创建w模式下的python代码如下:
#encoding:UTF-8f=open("test_w_02.txt",mode="w",encoding="utf-8")str=f.write("欢迎关注浩道linux") #清空原文件内容,再写新的内容f.flush() #刷新文件f.close()
运行以上代码后,test_w_02.txt文件内容如下:
3、a模式:首先在当前目录下创建一个test_a_03.txt文件,文件内容如下:
欢迎关注公众号:
创建a模式下的python代码如下:
#encoding:UTF-8f=open("test_a_03.txt",mode="a",encoding="utf-8") #在原文件内容上追加内容f.write("浩道linux")f.flush()f.close()
运行以上代码,test_a_03.txt文件内容如下:
4、rb模式:首先在当前目录下创建一个test_w_02.txt文件,文件内容如下:
欢迎关注浩道linux
创建rb模式下的python代码如下:
#encoding:UTF-8f=open("test_w_02.txt",mode="rb") #读取的内容就是字节str_b=f.read()print(str_b) #打印字节print(str_b.decode("utf-8")) #解码,将字节还原成字符串f.close()
运行以上代码后,结果如下所示:
5、wb模式:首先在当前目录下创建一个test_wb_05.txt文件,文件内容为空:
创建wb模式下的python代码如下:
#encoding:UTF-8f=open("test_wb_05.txt",mode="wb")f.write("浩道python".encode("utf-8"))f.close()
运行以上代码后,test_wb_05.txt文件内容为:
浩道python
这是由于解释器已经通过utf-8解码给我们看到的中文内容。
6、ab模式:跟上述a模式大同小异,只不过是由于处理二进制文件,这里不举例了。
7、r+模式:首先在当前目录下创建一个test_r+_07.txt文件,文件内容为:
关注浩道linux,
创建r+模式下的python文件如下:
#encoding:UTF-8#r+模式默认情况下光标在文件的开头,必须先读后写,光标才会从头到尾f=open("test_r+_07.txt",mode="r+",encoding="utf-8")str=f.read() #先读print(str)f.write("你会进步的!") #后写f.flush()f.close()
执行以上代码,结果如下所示:
8、w+模式,a+模式基本不用了。这里不举例了。
9、rb+、wb+、ab+就是在r+、w+、a+操作上处理二进制文件,这里也不举例了。
本文关于python编程下的文件操作到此结束,大家掌握常用的文件操作模式,会操作相关的文件即可,希望大家通过练习,能够好好理解相关的文件操作。
往期内容回顾:
学网络,这些是你必备的东西
python编程之函数入门篇
python编程之循环语句
shell脚本编程经典实战题汇总之一