Python open 函数
最后修改时间:2025 年 3 月 26 日
这份全面的指南将探讨 Python 的 open
函数,它是 Python 中处理文件的主要方法。我们将涵盖文件模式、读取和写入操作、上下文管理器、编码处理和最佳实践。通过实际的例子,你将掌握 Python 中的文件操作。
基本定义
open
函数创建一个文件对象,该对象允许从文件读取或写入文件。它需要一个文件路径并返回一个文件对象。基本语法是 open(file, mode='r', buffering=-1, encoding=None)
。
文件模式指定文件应该如何打开:'r' 用于读取,'w' 用于写入,'a' 用于追加,'x' 用于独占创建。添加 'b' 以二进制模式打开文件,而 '+' 允许读取和写入。
当尝试以读取模式读取一个不存在的文件时,该函数会引发 FileNotFoundError
异常。在写入模式下,如果文件不存在,它会创建该文件。使用后务必关闭文件以释放系统资源。
基本文件读取
这个例子演示了使用 open
函数读取文件内容的最简单方法。我们将打开一个文本文件并打印其内容。
# Open a file in read mode file = open('example.txt', 'r') # Read the entire file content content = file.read() # Print the content print(content) # Close the file file.close()
这段代码以读取模式 ('r') 打开 'example.txt',将其全部内容读取到字符串变量中,打印它,然后关闭文件。没有参数的 read
方法会读取到文件末尾。记住始终关闭文件以防止资源泄漏。
写入文件
这个例子展示了如何创建一个新文件并使用写入模式 ('w') 下的 open
函数向其中写入数据。
# Open a file in write mode with open('output.txt', 'w') as file: file.write('First line of text\n') file.write('Second line of text\n') file.write('Third line with number: %d\n' % 42)
该代码创建 'output.txt'(如果存在则覆盖),并写入三行文本。我们使用 with
语句,该语句会自动关闭文件。 write
方法完全按照给定的方式写入字符串,因此我们包含 \n
作为换行符。
逐行读取
对于大型文件或处理文本数据时,逐行读取比一次读取整个文件更有效率。
# Open file and process line by line with open('data.txt', 'r') as file: line_number = 1 for line in file: print(f"Line {line_number}: {line.strip()}") line_number += 1
这个例子打开 'data.txt' 并单独处理每一行。文件对象是可迭代的,每次迭代产生一行。 strip
删除前导/尾随空格和换行符。这种方法是内存高效的,因为它不会一次加载整个文件。
追加到文件
追加模式 ('a') 允许将内容添加到现有文件的末尾,而不会覆盖其当前内容。
import datetime # Append timestamp and message to log file with open('app.log', 'a') as log_file: timestamp = datetime.datetime.now().isoformat() log_file.write(f"[{timestamp}] Application started\n") log_file.write(f"[{timestamp}] Loading configuration\n")
这段代码将带有时间戳的消息追加到 'app.log'。如果该文件不存在,将会被创建。每次运行程序都会添加新行,而不会影响之前的内容。这非常适合于日志记录场景,你希望保持事件的历史记录。
二进制文件操作
当处理非文本文件(如图像、可执行文件或任何需要字节级准确性的文件)时,二进制模式 ('b') 至关重要。
# Copy a binary file (e.g., an image) with open('source.jpg', 'rb') as source: with open('copy.jpg', 'wb') as destination: chunk_size = 4096 # 4KB chunks while True: chunk = source.read(chunk_size) if not chunk: break destination.write(chunk)
这个例子通过以二进制模式 ('rb') 读取和以二进制模式 ('wb') 写入来复制一个 JPEG 文件。我们以块读取和写入,以高效地处理大型文件。二进制模式可以防止任何可能损坏二进制数据的编码/解码或换行符转换。
最佳实践
- 始终使用上下文管理器: 优先使用
with
语句进行文件处理 - 处理异常: 捕获文件操作的 IOError/OSError
- 对非文本使用二进制模式: 防止二进制数据损坏
- 考虑大型文件的内存: 逐行处理,而不是一次读取所有内容
- 指定编码: 显式设置文本文件的编码(通常为 'utf-8')
资料来源
作者
列出所有 Python 教程。