Python文件操作详解:open函数、读写模式与File对象方法

Theo
Theo
发布时间:2026-10-12 | 4人浏览过
原创

本文详细解析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/15

1.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) 向文件写入一个序列字符串列表,如果需要换行,则要自己加入换行符。

总结

本文到此结束,希望能为读者提供帮助,同时也欢迎大家关注本站以获取更多技术内容。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表