跳至内容

Python 文件操作

在计算机存储中,文件(File)是分布在存储设备上用来存储数据的容器。

当读取或者写入文件时,首先需要打开文件。读写完成后,需要关闭文件,进而释放和文件关联的系统资源。

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

  1. 打开文件
  2. 读取或者写入操作
  3. 关闭文件

打开文件

Python中,使用 open() 函数打开文件。

假设,当前目录下有一个 test.txt 文件

test.txt

open打开示例

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

这里,创建了一个文件对象file_test。这个对象用于后续的文件操作。

提示

默认情况下,文件是以只读模式打开。因此,上面的代码等同于:

python
file_test = open("test.txt", "r")
file_test = open("test.txt", "r")

这里的参数"r"表示文件只能读取,不能修改。

文件打开模式

模式说明
r只读模式(默认)
w写入模式;如文件不存在,创建新文件;如文件存在,覆盖源文件
x新建打开模式;如果文件存在,返回失败
a追加模式打开文件;如果文件不存在,创建新文件
t以文本模式打开(默认)
b以二进制模式打开
+读写更新

不同打开模式open示例

python
# 默认方式打开
file_default = open("test.txt")
# 文本写入方式打开
file_write = open("test.txt", "w")
# 二进制读写模式打开
file_binary = open("test.txt", "r+b")
# 默认方式打开
file_default = open("test.txt")
# 文本写入方式打开
file_write = open("test.txt", "w")
# 二进制读写模式打开
file_binary = open("test.txt", "r+b")

读取文件

打开文件后,Python中可以使用 read() 函数读取文件内容。

python
file_test = open("test.txt")
# 读取文件
content = file_test.read()


# 输出:(参考上图的文件内容)
# This is a test file.
# Hello from the test file.
file_test = open("test.txt")
# 读取文件
content = file_test.read()


# 输出:(参考上图的文件内容)
# This is a test file.
# Hello from the test file.

关闭文件

当文件操作完毕后,需要恰当地关闭文件。关闭文件将会释放关联的资源。

Python中,使用 close() 函数来关闭文件。

python
# 打开文件
file_test = open("test.txt")
# 读取文件
content = file_test.read()
print(content)
# 关闭文件
file_test.close()
# 打开文件
file_test = open("test.txt")
# 读取文件
content = file_test.read()
print(content)
# 关闭文件
file_test.close()

这里,通过 file_test.close() 完成了文件关闭。任何时候,文件操作完成后,及时关闭都是一个好的习惯。

异常处理

当文件读写出现异常后,上面示例中的关闭函数就会执行不到。这样就会导致资源的泄漏。

Python中安全的释放方式应该用try...finally块。

python
try:
    file_test = open("test.txt")
    content = file_test.read()
    print(content)
finally:
    #关闭文件
    file_test.close()
try:
    file_test = open("test.txt")
    content = file_test.read()
    print(content)
finally:
    #关闭文件
    file_test.close()

这里,通过在finally里关闭文件,不管是否发生异常,都会关闭文件。

with...语法

Python中,有一种更简便且安全的关闭方式就是使用with...open语法自动关闭文件。

python
with open("test.txt") as file_test:
    content = file_test.read()
    print(content)
with open("test.txt") as file_test:
    content = file_test.read()
    print(content)

由于with...open语法自动关闭文件,推荐使用这种方式

写入文件

Python中写入文件时,注意两件事:

  • 如果写入文件不存在,将会创建新的文件
  • 如果文件存在,原内容会被擦除;新内容添加进文件。

如果写入文件,需要在以写入模式打开文件,即open时指定 "w" 参数。

python
with open("test2.txt", "w") as file2:
    file2.write("w3query.com")
with open("test2.txt", "w") as file2:
    file2.write("w3query.com")

由于当前目录没有test2.txt,那么新的test2.txt文件将会被创建。

文件常用方法

Python中提供了丰富的文件内置方法。

file函数清单

方法说明
close()关闭文件
detach()从TextIOBase中分离二进制缓冲并返回
fileno()返回文件号(文件描述符)
flush()将写缓冲刷到文件
isatty如果文件流支持交互,返回True
read(n)从文件中至多读取n字节,如果n未指定或负值,则读取到文件末尾
readable()如果文件流可读,返回True
readline(n=-1)文件读取一行,如果指定n,最多读取n字节
readlines(n=-1)文件读取并返回多行列表,如果指定n,最多读取n字节
seek(offset, from=SEEK_SET)根据from值,文件位置偏移量offset
seekable()如果文件流支持随机读取,返回True
tell()返回文件对象指针当前位置
truncate(size=None)文件流重置size字节大小,如果size未指定,重置当前位置
writable()如果文件流可以写入,返回True
write(s)写入字符串s到文件,返回写入字符的数量
writelines(lines)写入多行列表到文件