Python 文件I/O操作
- 文件操作基础:在 Python 中,文件操作通常包括打开文件、执行读取或写入 操作,然后关闭文件以释放资源。
- 文件读写模式:Python 提供多种文件打开模式,如读模式('r')、写模式('w')、追加模式('a'),以及文本('t')和二进制('b')模式。
- 安全的文件处理:使用
with...open
语法可以自动管理文件的打开和关闭,而在异常情况下,通过try...finally
块确保文件正确关闭是一种更安全的做法。
文件是计算机存储设备中用于存储数据的容器。
当我们想要从文件中读取或写入文件时,我们需要首先打开它。完成操作后,需要关闭文件,以释放与该文件相关的资源。
因此,在 Python 中,文件操作按以下顺序进行:
- 打开文件
- 读取或写入(执行操作)
- 关闭文件
在 Python 中打开文件
在 Python 中,我们使用 open()
方法来打开文件。
为了演示我们如何在 Python 中打开文件,假设我们有一个名为 test.txt
的文件,内容如下。
现在,让我们尝试使用 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
语法。