跳到主要内容

Python 文件I/O操作

提示
  1. 文件操作基础:在 Python 中,文件操作通常包括打开文件、执行读取或写入操作,然后关闭文件以释放资源。
  2. 文件读写模式:Python 提供多种文件打开模式,如读模式('r')、写模式('w')、追加模式('a'),以及文本('t')和二进制('b')模式。
  3. 安全的文件处理:使用 with...open 语法可以自动管理文件的打开和关闭,而在异常情况下,通过 try...finally 块确保文件正确关闭是一种更安全的做法。

文件是计算机存储设备中用于存储数据的容器。

当我们想要从文件中读取或写入文件时,我们需要首先打开它。完成操作后,需要关闭文件,以释放与该文件相关的资源。

因此,在 Python 中,文件操作按以下顺序进行:

  1. 打开文件
  2. 读取或写入(执行操作)
  3. 关闭文件

在 Python 中打开文件

在 Python 中,我们使用 open() 方法来打开文件。

为了演示我们如何在 Python 中打开文件,假设我们有一个名为 test.txt 的文件,内容如下。

在 Python 中打开文件

现在,让我们尝试使用 open() 函数从这个文件中读取数据。

# 在当前目录打开文件
file1 = open("test.txt")

在这里,我们创建了一个名为 file1 的文件对象。这个对象可用于处理文件和目录。

默认情况下,文件以读取模式打开(无法修改)。上述代码等同于

file1 = open("test.txt", "r")

在这里,我们通过传递 "r" 参数明确指定了模式,表示文件是为了读取而打开的。

在 Python 中打开文件的不同模式

模式描述
r打开文件进行读取。(默认)
w打开文件进行写入。如果文件不存在则创建,如果文件存在则截断。
x打开文件进行排他性创建。如果文件已存在,操作失败。
a打开文件进行追加,在文件末尾写入而不截断文件。如果文件不存在则创建。
t以文本模式打开。(默认)
b以二进制模式打开。
+打开文件进行更新(读取和写入)

以下是如何以不同模式打开文件的几个简单示例,

file1 = open("test.txt") # 等同于 'r' 或 'rt'
file1 = open("test.txt",'w') # 以文本模式写入
file1 = open("img.bmp",'r+b') # 以二进制模式读取和写入

在 Python 中读取文件

打开文件后,我们使用 read() 方法来读取其内容。例如,

# 打开文件
file1 = open("test.txt", "r")

# 读取文件
read_content = file1.read()
print(read_content)

输出

This is a test file.
Hello from the test file.

在上述示例中,我们已读取当前目录中的 test.txt 文件。请注意代码,

read_content = file1.read

在这里,file1.read() 读取了 test.txt 文件,并将其内容存储在 read_content 变量中。

在 Python 中关闭文件

当我们完成对文件的操作后,需要适当关闭文件。

关闭文件将释放与文件关联的资源。这是通过 Python 中的 close() 方法完成的。例如,

# 打开文件
file1 = open("test.txt", "r")

# 读取文件
read_content = file1.read()
print(read_content)

# 关闭文件
file1.close()

输出

This is a test file.
Hello from the test file.

在这里,我们使用了 close() 方法来关闭文件。

完成文件操作后,我们应始终关闭文件;这是良好的编程实践。

文件异常处理

如果在执行文件操作时发生异常,代码将在不关闭文件的情况下退出。更安全的方式是使用 try...finally 块。

让我们看一个示例,

try:
file1 = open("test.txt", "r")
read_content = file1.read()
print(read_content)

finally:
# 关闭文件
file1

.close()

在这里,我们在 finally 块中关闭了文件,因为 finally 总是执行,即使发生异常,文件也会被关闭。

使用 with...open 语法

在 Python 中,我们可以使用 with...open 语法自动关闭文件。例如,

with open("test.txt", "r") as file1:
read_content = file1.read()
print(read_content)

注意:由于我们不必担心关闭文件,因此习惯使用 with...open 语法。

在 Python 中写入文件

在写入文件时,我们需要记住两件事。

  • 如果我们尝试打开一个不存在的文件,将会创建一个新文件。
  • 如果文件已经存在,则其内容被擦除,并将新内容添加到文件中。

为了在 Python 中写入文件,我们需要以写入模式打开它,方法是在 open() 中作为第二个参数传递 "w"

假设,我们没有一个名为 test2.txt 的文件。让我们看看如果我们向 test2.txt 文件写入内容会发生什么。

with open('test2.txt', 'w') as file2:

# 向 test2.txt 文件写入内容
file2.write('编程很有趣。')
file2.write('mashangxue123 适合初学者')

在这里,将会创建一个新的 test2.txt 文件,并且此文件将包含在 write() 方法中指定的内容。

向 Python 文件写入

Python 文件方法

文件对象有多种可用方法。其中一些已在上述示例中使用。

这里是文本模式下方法的完整列表及简要描述:

方法描述
close()关闭已打开的文件。如果文件已关闭,则无效果。
detach()TextIOBase 中分离底层二进制缓冲区并返回它。
fileno()返回文件的整数编号(文件描述符)。
flush()刷新文件流的写入缓冲区。
isatty()如果文件流是交互式的,则返回 True
read(n)从文件中读取至多 n 个字符。如果为负数或 None,则读取直到文件结束。
readable()如果文件流可以从中读取,则返回 True
readline(n=-1)从文件中读取并返回一行。如果指定,则最多读取 n 个字节。
readlines(n=-1)从文件中读取并返回行列表。如果指定,则最多读取 n 个字节/字符。
seek(offset, from=SEEK_SET)将文件位置更改为相对于 from(开始,当前,结束)的 offset 字节。
seekable()如果文件流支持随机访问,则返回 True
tell()返回表示文件对象当前位置的整数。
truncate(size=None)将文件流大小调整为 size 字节。如果未指定 size,则调整为当前位置。
writable()如果文件流可以写入,则返回 True
write(s)将字符串 s 写入文件并返回写入的字符数。
writelines(lines)将行列表写入文件。