Python文件操作详解:open函数、读写模式与File对象方法
本文详细解析Python中文件操作的核心机制。重点讲解open()函数的各参数含义及常用文件打开模式(r, w, a, b等),区分文本与二进制文件的处理差异。深入介绍File对象的读写方法,包括write、read、readline及readlines的使用场景与内存注意事项,并提供完整的代码示例与对象属性说明,帮助开发者掌握高效的文件处理技巧。
1.使用open()函数打开文件
在读取文件内容之前,必须先打开该文件。Python提供了内置函数open()来执行此操作,通过它我们可以以读或写的方式访问文件内容,供程序进一步处理。在Python中,打开后的文件被视为一种特定的数据类型。使用open()函数的基本语法格式如下所示。
open(filename, mode='r', buffering=None, encoding=None, errors=None,
newline=None, closefd=True, opener=None)
open函数涉及的关键概念包括:打开方式(读read或写write)、数据格式(文本或二进制)以及写入策略(覆盖或追加)。
调用open()函数成功打开文件后,会返回一个文件对象。该函数的主要参数具体说明如下:
filename:表示要打开的文件名,通常包含文件路径和文件名。mode:指定文件的打开模式。buffering:为可选参数,用于指定缓冲区大小。encoding:指定文件的编码类型。- 仅文本文件需要指定编码,若对二进制文件指定编码类型,程序将抛出异常。
errors:指定编码错误时的处理方式。newline:控制通用换行符模式的行为。closefd:控制在关闭文件时是否彻底关闭文件对象。
在上述参数中,“mode”参数决定了文件的打开模式。Python中常用的文件打开模式如下表所示。
| 模式 | 描述 |
| r | 以读的方式打开文件(默认) |
| rb | 以二进制的格式打开一个文件只用于读。文件指针将会放在文件开头。 |
| r+ | 打开一个文件用于读写。文件指针将会放在文件开头。 |
| rb+ | 以二进制的格式打开一个文件用于读写。文件指针将会放在文件开头。 |
| w | 以写的方式打开,先清空文件再写(覆盖),如果该文件不存在,创建新文件 |
| wb | 以二进制的格式打开文件并写入,先清空文件再写(覆盖),如果该文件不存在,创建新文件。 |
| w+ | 以二进制的格式打开一个文件用于读写。先清空文件再写(覆盖),如果该文件不存在,创建新文件。 |
| wb+ | 以二进制的格式打开文件并读写,先清空文件再写(覆盖),如果该文件不存在,创建新文件。 |
| a | 以追加的方式去写 |
| ab | 以二进制的格式打开一个文件夹用于追加。如果该文件存在,文件指针将会放在文件的结尾。也就是说,新的内容将会写入到已有的内容之后。如果该文件不存在,创建新文件。 |
| a+ | 打开一个文件用于读写。如果该文件存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件。 |
| ab+ | 以二进制格式打开一个文件用于追加。如果该文件存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件。 |
下图直观地总结了上述几种模式的差异:

#默认以文本读的方式打开
file_obj = open("file.txt", encoding="utf-8")
data = file_obj.read()
print(data)
file_obj.close()
file_obj = open("file.txt", "rt", encoding="utf-8")
data = file_obj.read()
print(data)
file_obj.close()
file_obj = open("file.txt", "w", encoding="utf-8")
data = file_obj.write("11111111111111111")
print(data)
file_obj.close()
file_obj = open("file2.txt", "w", encoding="utf-8")
data = file_obj.write("11111111111111111")
print(data)
file_obj.close()
file_obj = open("file2.txt", "a", encoding="utf-8")
data = file_obj.write("2222222222222")
print(data)
file_obj.close()
file_obj = open("file3.txt", "a+", encoding="utf-8")
file_obj.write("33333333333333333333333333")
file_obj.close()
file_obj = open("file.txt", encoding="utf-8")
data = file_obj.read()
file_obj.close()
1.1.2 二进制方式打开:适用于图片、音频、视频或其他非文本文件。
#打开”IO.png“文件,并以二进制的方式读出, b不能单独使用(b前的r不能省略)
file_obj = open("IO.png", "rb")
data = file_obj.read()
print(data)
#关闭文件
file_obj.close()
#以二进制的方式写入文件”psb_copy.jpg“
file_obj = open("psb_copy.jpg", "wb")
file_obj.write(data)
#关闭文件
file_obj.close()
注意:示例中的“IO.png”文件内存储了一张照片。
2.文件的操作
以文本方式写入文件时,无需额外指定编码;而以二进制方式写入文件时,内容必须为bytes类型,因此需通过str.encode('utf-8')将字符串转换为bytes对象。
1.2.1 文件写操作:
write()方法 f.write("hello world") #用于向目标文本文写入一行字符串。
f.write("hello world".encode("utf-8")) #用于向目标二进制文件写入一行字符串。1.2.2 文件写操作(续):
writelines()方法用于写入文件的字符串序列。
seq = ["hello world 1\n", "nihao wohao 2"] f.writelines( seq ) 7/151.2.3 文件读操作:
read()方法从文件中读取指定的字节数,若未指定参数或值为负数,则读取全部内容。
ret = f.read() #默认读取全部内容,例如 ret = f.read(5) 用于读出指定长度的字符。1.2.4 文件读操作(续):
readline()方法可以读出一行数据,ret = f.readline() #用于读取单行内容。注意:存在一个容易混淆的
readlines()方法,ret = f.readlines() #返回的是一个列表,包含读取字符所在行的完整内容。但当数据量较大时,这种用法会占用大量内存,需谨慎使用。
3.使用File对象操作文件
3.1 File对象的介绍
File对象包含以下属性信息,具体见下表:
File对象中的属性信息
| 属性 | 描述 |
| file.closed | 如果文件已关闭返回True;否则返回False |
| file.mode | 返回打开文件的访问模式 |
| file.name | 返回文件的名称 |
在Python程序中,File对象通过内置函数实现文件操作,其中常用的内置函数如下所示。
File对象中的内置函数
| 函数 | 功能 |
| file.close() | 关闭文件,关闭文件后不能再进行读写操作 |
| file.flush() | 刷新文件内部缓冲区,直接把内部缓冲区的数据写入文件,而不是被动的等待输出缓冲区写入。 |
| file.fileno() | 返回一个整形的文件描述,可以用在如os模块的read方法等一些底层操作上 |
| file.isatty() | 如果文件连接到一个终端设备返回True,否则返回False |
| file.next() | 返回文件下一行 |
| file.read([size]) | 从文件读取指定的字节数,如果为给定或者为负值,则读取所有字节 |
| file.readline([size]) | 读取整行,包括“\n” |
| file.readlines([hint]) | 读取所有行并返回列表,如给定hint>,返回总合大于约为hint字节的行,实际读取值可能比hine大,因为需要填充缓冲区 |
| file.seek(offsrt[, whence]) | 设置文件当前位置 |
| file.tell | 返回文件当前位置 |
| file.truncate([size]) | 截取文件,截取的字节通过size指定,默认为当前文件的位置 |
| file.write(str) | 将字符串写入文件,没有返回值 |
| file.writeline(lines) | 向文件写入一个序列字符串列表,如果需要换行,则要自己加入换行符。 |
总结
本文到此结束,希望能为读者提供帮助,同时也欢迎大家关注本站以获取更多技术内容。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









