python中open函数与with open 的演进与示例

在 Python 文件操作中,open() 是基础函数with open 是优化后的最佳实践,二者的核心区别是资源管理(文件关闭),下面从演进逻辑、用法、优缺点完整讲解。
 

一、演进背景:为什么需要从 open () 升级到 with open?

 
早期 Python 操作文件,必须手动调用 open() 打开、close() 关闭。
 
手动关闭文件有致命缺陷
 
  1. 代码报错 / 异常时,close() 不会执行,文件会一直占用系统资源(文件句柄泄漏);
  2. 忘记写 close() 是新手高频错误;
  3. 代码冗余,可读性差。
 
因此 Python 2.5+ 引入了 with 语句,它基于上下文管理器,能自动关闭文件,彻底解决手动关闭的问题,成为现在文件操作的标准写法。
 

 

二、基础用法:原生 open () 函数

 

语法

 
python
文件对象 = open(文件路径, 模式, 编码)
# 读写操作
文件对象.close()  # 必须手动关闭
 

完整示例

python
# 1. 打开文件
f = open("test.txt", "w", encoding="utf-8")

# 2. 写入内容
f.write("Hello, 原生 open() 函数")

# 3. 必须手动关闭!
f.close()

# 读取文件验证
f = open("test.txt", "r", encoding="utf-8")
print(f.read())
f.close()
 

核心问题(致命缺点)

 
如果代码中间报错,close() 永远不会执行:
 
python
f = open("test.txt", "w", encoding="utf-8")
# 模拟报错
1 / 0  # 代码崩溃
f.close()  # 这行永远不会执行,文件无法关闭!
 
 

 

三、进阶用法:with open(官方推荐)

核心原理

 
with 语句会自动管理文件的打开和关闭,无论代码是否报错,文件都会被安全关闭,无需手动写 close()
 

语法

python
with open(文件路径, 模式, 编码) as 文件对象:
    # 缩进内:文件已打开,可直接读写
    读写操作
# 缩进外:文件已自动关闭
 

完整示例(写入 + 读取)

python
# 1. 写入文件(自动关闭)
with open("test.txt", "w", encoding="utf-8") as f:
    f.write("Hello, with open 最佳实践")

# 2. 读取文件(自动关闭)
with open("test.txt", "r", encoding="utf-8") as f:
    content = f.read()
    print(content)
 

优势验证:报错也能自动关闭文件

python
with open("test.txt", "w", encoding="utf-8") as f:
    1 / 0  # 代码崩溃
# 即使报错,with 也会自动执行 f.close(),文件安全关闭!
 
 

 

四、open () 与 with open 完整对比

 
特性 原生 open () with open
文件关闭方式 必须手动调用 close() 自动关闭,无需手动操作
异常安全性 不安全(报错会泄漏资源) 绝对安全(无论如何都会关闭)
代码简洁性 冗余,多一行关闭代码 简洁优雅,可读性高
适用场景 极特殊的底层操作 所有文件操作(99% 场景)
Python 官方推荐度 ❌ 不推荐 ✅ 强制推荐
 

 

五、常用文件操作模式(两种写法通用)

 
open() 第二个参数是模式,最常用的 4 种:
 
  1. r:只读(默认),文件不存在会报错
  2. w:只写,覆盖原有内容,文件不存在自动创建
  3. a:追加写入,不覆盖原有内容
  4. r+:读写模式
 

 

六、进阶示例:逐行读取大文件

 
with open 处理大文件更高效,逐行读取不占用内存:
 
python
# 逐行读取大文件(推荐写法)
with open("large_file.txt", "r", encoding="utf-8") as f:
    for line in f:
        print(line.strip())  # 逐行处理
 
 

 

总结

  1. 原生 open():是基础,但需要手动关闭文件,不推荐使用
  2. with open:基于上下文管理器,自动关闭文件、安全、简洁,是 Python 文件操作的唯一标准写法
  3. 日常开发中,所有文件操作都必须用 with open,彻底避免资源泄漏问题。
posted @ 2026-04-18 16:30  chenlight  阅读(115)  评论(0)    收藏  举报