Skip to content

Python 文件操作:打开与关闭

在 Python 中,对文件进行操作,首先需要打开文件,完成操作后需要关闭文件。本文将详细介绍如何使用 open() 函数打开文件,以及如何安全地关闭文件,保证数据完整性。

使用 open() 函数打开文件

Python 提供了一个内置函数 open(file_name, mode='r', encoding=None) 来打开文件。这个函数会返回一个文件对象,通过这个对象可以对文件进行各种操作。

参数详解:

  1. file_name (必需参数)

    • 指定要打开的文件的路径。
    • 可以是绝对路径,也可以是相对路径。
      • 相对路径: 相对于当前 Python 脚本所在目录的路径。
        • 'my_file.txt':表示当前目录下名为 my_file.txt 的文件。
        • '../data/my_file.txt':表示当前目录的上一级目录的 data 文件夹下的 my_file.txt 文件。
      • 绝对路径: 文件在计算机中的完整路径。
        • 在 Windows 系统中,例如:'C:\Users\YourName\Documents\my_file.txt'
        • 在 macOS 或 Linux 系统中,例如:'/Users/YourName/Documents/my_file.txt'

    注意: 推荐使用原始字符串来表示 Windows 下的绝对路径,例如:r'C:\Users\YourName\Documents\my_file.txt', 避免反斜杠被解释为转义字符。

    python
    # 示例:使用绝对路径打开文件
    file_path = r'C:\Users\YourName\Documents\my_file.txt'  # Windows 示例,请替换为你的实际路径
    try:
        f = open(file_path, 'r')
        print("文件打开成功!")
        f.close()
    except FileNotFoundError:
        print("文件不存在!")
  2. mode (可选参数, 默认为 'r'):

    • 指定文件的打开模式,决定了你对文件的操作权限(读、写、追加等)。

    • 以下是常用的文件打开模式:

      模式描述
      'r'只读模式 (read):打开文件以供读取。这是默认模式。
      'w'写入模式 (write):打开文件以供写入。如果文件存在,则清空文件内容;如果文件不存在,则创建新文件。
      'x'独占创建模式 (exclusive creation):打开文件以供写入。但如果文件已存在,则会抛出 FileExistsError 异常。
      'a'追加模式 (append):打开文件以供写入。任何新写入的数据都会被添加到文件末尾。如果文件不存在,则创建新文件。
      'b'二进制模式 (binary):以二进制格式打开文件。用于处理非文本文件,如图片、音频等。
      't'文本模式 (text):以文本模式打开文件。这是默认模式。
      '+'更新模式 (update):可以与 'r''w''a' 结合使用,实现读写操作。例如:'r+'(读写)、'w+'(写读)、'a+'(追加读)。注意:使用 w+ 时会清空文件内容。
      'r+'读写模式 (read and write):打开文件进行读写操作。文件必须存在,否则报错。 写入的数据会覆盖原有数据,除非使用 seek() 方法移动文件指针。
      'w+'写读模式 (write and read):打开文件进行读写操作。如果文件存在,则清空文件内容;如果文件不存在,则创建新文件。 写入的数据可以被读取。
      'a+'追加读模式 (append and read):打开文件进行读写操作。所有写入的数据都会被添加到文件末尾。如果文件不存在,则创建新文件。 可以读取文件中的内容。
      'rb'二进制只读模式:以二进制格式打开文件,只能读取文件内容。
      'wb'二进制写入模式:以二进制格式打开文件,只能写入文件内容。如果文件存在,则清空文件内容;如果文件不存在,则创建新文件。
      'ab'二进制追加模式:以二进制格式打开文件,只能在文件末尾追加内容。如果文件不存在,则创建新文件。
      'r+b'二进制读写模式:以二进制格式打开文件,可以读取和修改文件内容。文件必须存在,否则报错。
      'w+b'二进制写读模式:以二进制格式打开文件,可以读取和修改文件内容。如果文件存在,则清空文件内容;如果文件不存在,则创建新文件。
      'a+b'二进制追加读模式:以二进制格式打开文件,可以读取文件内容,并且只能在文件末尾追加内容。如果文件不存在,则创建新文件。
  3. encoding (可选参数, 推荐指定):

    • 指定文件的字符编码格式。
    • 常用的编码格式包括 'utf-8''gbk''ascii' 等。
    • 强烈建议 在打开文本文件时指定 encoding 参数,以避免因编码问题导致乱码。
    • 如果未指定,则使用系统默认编码。在不同操作系统上,默认编码可能不同。

示例:

python
# 以只读模式打开一个 UTF-8 编码的文本文件
f = open('my_file.txt', 'r', encoding='utf-8')

# 以写入模式打开一个 GBK 编码的文本文件,如果文件存在则清空内容
f = open('my_file.txt', 'w', encoding='gbk')

# 以二进制追加模式打开一个文件
f = open('my_image.png', 'ab')

关闭文件

完成文件操作后,务必关闭文件,释放系统资源。有两种方法可以关闭文件:

  1. 使用 close() 方法:

    python
    f = open('my_file.txt', 'r', encoding='utf-8')
    # ... 进行文件操作 ...
    f.close()  # 关闭文件

    注意: 如果在文件操作过程中发生异常,可能会导致 close() 方法没有被调用,从而导致文件没有被正确关闭。

  2. 使用 with 语句 (推荐):

    with 语句可以确保文件在使用完毕后自动关闭,即使发生异常也能保证。这是一种更安全、更简洁的方式。

    python
    with open('my_file.txt', 'r', encoding='utf-8') as f:
        # ... 进行文件操作 ...
    # 文件在此处自动关闭

    with 语句块执行完毕后,文件会自动关闭,无需显式调用 close() 方法。

  • 使用 open() 函数打开文件,需要指定文件名和打开模式。
  • 为了避免乱码问题,建议指定 encoding 参数。
  • 使用 with 语句可以确保文件在使用完毕后自动关闭,是推荐的文件操作方式。
  • 良好的文件操作习惯可以避免资源泄露和数据丢失。