Python基础:一文搞懂 Python 文件操作:读取、写入与追加模式详解
前言在 Python 编程中文件处理是不可或缺的一部分。无论是日志记录、数据持久化还是配置文件读取掌握文件的打开、读写及关闭机制都是基本功。本文将基于 Python 文件操作的核心知识点为大家梳理一份清晰的操作指南。打开文件函数 open()Python 内置的 open() 函数用于打开一个已经存在的文件或者创建一个新文件。它是所有文件操作的入口。基本语法open(file, mode, encoding)file: 要打开的目标文件名的字符串可以包含文件所在的目标路径支持绝对路径和相对路径。mode: 设置打开文件的模式访问模式如只读、写入、追加等。encoding: 编码格式推荐使用 UTF-8 以避免乱码问题。三种基础访问模式模式说明r (Read)只读模式。以只读的方式打开文件文件的指针将会放在文件的开头。这是默认模式。w (Write)写入模式。打开一个文件只用于写入。如果该文件已存在则打开文件并从开头开始写入原有内容会被覆盖如果该文件不存在则创建新文件并写入。a (Append)追加模式。打开一个文件用于追加。如果该文件已存在则打开文件并将写入到已有内容之后如果文件不存在则创建新文件并写入。文件读取操作读取文件时我们通常有几种不同的方法来获取内容。常用读取方法read(num):语法格式文件对象.read(num)num 表示从文件中读取的数据长度单位是字节。如果没有传入 num那么就表示读取文件中的所有数据。示例# 读取整个文件内容 with open(example.txt, r, encodingutf-8) as f: content f.read() print(content) 读取前100个字节 with open(example.txt, r, encodingutf-8) as f: first_100_bytes f.read(100) print(first_100_bytes)readlines():语法格式文件对象.readlines()可以按照行的方式把整个文件中的内容进行一次性读取并且返回一个列表对象其中每一行作为一个元素。示例# 读取文件所有行到列表中 with open(example.txt, r, encodingutf-8) as f: lines f.readlines() print(f文件共有 {len(lines)} 行) for i, line in enumerate(lines, 1): print(f第{i}行: {line.strip()})readline():语法格式文件对象.readline()一次读取一行内容。示例# 逐行读取文件 with open(example.txt, r, encodingutf-8) as f: line1 f.readline() print(f第一行: {line1.strip()}) line2 f.readline() print(f第二行: {line2.strip()}) 继续读取后续行.../code/pre lt;/ligt; /ul /li推荐的读取方式with 语句与循环在实际开发中为了避免忘记关闭文件导致资源泄露强烈推荐使用with open()语句。它可以在操作完文件后自动关闭文件。方式一使用 readlines()with open(file, r) as f: lines f.readlines() # lines 是一个列表方式二使用 for 循环逐行读取推荐处理大文件for line in open(file, r): print(line) # line 就是记录文件的一行数据文件写入操作 (w 模式)写入文件通常遵循“打开 - 写入 - 刷新/关闭”的步骤。写入步骤打开文件:f open(file, w)写入文件:f.write(xxxxxxxxx)内容刷新:f.flush()⚠️ 重要注意缓冲区机制直接调用 write内容并未真正写入物理磁盘文件而是会积攒在程序的内存中称之为缓冲区。当调用 flush 的时候内容才会真正写入文件。为什么要这样做避免频繁的操作硬盘导致效率下降。策略是攒一堆一次性写入。提示使用with open(...)语句时程序会在退出代码块时自动执行close()这通常也会触发 flush 操作所以手动 flush 在 with 语句中不是必须的但在长流程写入中很有用。文件追加操作 (a 模式)如果你不想覆盖原文件的内容而是在末尾添加新内容需要使用 a 模式。操作步骤打开文件:f open(file, a)文件写入:f.write(xxxxxxx)内容刷新:f.flush()模式特性文件不存在时: 会创建新文件。文件存在时: 追加写入到文件内容的末尾不会清空原有数据。文件关闭与异常处理在文件操作中正确处理文件的关闭和可能出现的异常是保证程序健壮性和资源管理的关键。本节将详细说明为什么必须关闭文件、如何使用标准异常处理结构以及常见的文件操作异常类型。1. 为什么必须显式或隐式with语句关闭文件打开文件后操作系统会为文件分配系统资源如文件描述符。如果不及时关闭文件会导致以下问题资源泄露每个打开的文件都会占用一个文件描述符系统对同时打开的文件数量有限制。未关闭的文件会持续占用资源可能导致程序后续无法打开新文件。数据丢失风险写入操作可能因缓冲区未刷新而丢失数据。虽然使用with语句或显式调用close()通常会触发flush()但异常情况下如果未正常关闭文件缓冲区中的数据可能不会写入磁盘。文件锁定某些操作系统下打开的文件会被锁定其他进程可能无法访问或修改该文件直到文件被关闭。最佳实践始终使用with语句上下文管理器来打开文件它可以确保在代码块执行完毕后自动关闭文件即使在发生异常时也能正常关闭。# 使用 with 语句无需手动调用 close() with open(example.txt, r) as f: content f.read() # 离开 with 块后文件自动关闭2. 使用 try...except...finally 结构进行文件操作时的标准异常处理代码示例虽然with语句能自动处理文件关闭但在更复杂的场景或需要更精细的异常处理时可以使用传统的try...except...finally结构。file None try: # 尝试打开文件 file open(data.txt, r, encodingutf-8) data file.read() # 这里可以进行数据处理 processed_data data.upper() print(processed_data) except FileNotFoundError: print(错误文件未找到请检查路径和文件名。) except PermissionError: print(错误没有文件访问权限。) except IOError as e: print(f输入输出错误: {e}) except Exception as e: print(f发生未知错误: {e}) finally: # 无论是否发生异常都确保文件被关闭 if file is not None: file.close() print(文件已关闭。)代码说明try块中执行文件打开和读取操作。except块捕获特定异常如FileNotFoundError、PermissionError并进行处理。finally块确保无论是否发生异常文件都会被关闭这是资源管理的安全网。3. 常见的文件操作异常类型Python 文件操作中常见的异常类型包括异常类型触发条件说明FileNotFoundError尝试打开不存在的文件读取模式最常见异常之一。在读取模式如 r下如果文件不存在会引发此异常。PermissionError没有足够的权限访问文件尝试读取或写入受保护的文件或目录权限不足时引发。IsADirectoryError尝试将目录当作普通文件打开使用文件操作函数打开一个目录路径时引发。IOError(Python 3.3 中多为 OSError 的子类)输入输出操作失败磁盘已满、设备错误等底层 I/O 问题。UnicodeDecodeError文件编码与指定编码不匹配使用错误的编码如用 utf-8 读取 GBK 文件读取文本文件时引发。处理建议在文件操作代码中应根据具体业务场景捕获并处理这些异常例如给用户友好的提示、记录日志或进行降级处理而不是让程序崩溃。总结Python 的文件操作逻辑非常直观读取首选with open配合 for 循环或 readlines。写入要注意 w 模式会清空原文件且需理解缓冲区的概念。追加使用 a 模式适合日志记录等场景。希望这篇总结能帮助你更好地掌握 Python 文件操作