当前位置: 首页 > news >正文

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,彻底避免资源泄漏问题。
http://www.jsqmd.com/news/661633/

相关文章:

  • 打破平台壁垒:WorkshopDL如何让非Steam玩家也能畅享创意工坊模组
  • 从仿真结果到发表级图表:手把手教你用Lumerical脚本做数据可视化
  • STM32 DSP库实战:arm_sin_f32如何将三角函数运算速度提升一个数量级
  • 探索Happy Island Designer:重塑岛屿规划体验的智能工具
  • 告别手算!用PLECS扫频+Matlab辨识,5步搞定BUCK电路PID参数(附完整脚本)
  • OpenCPN海图插件配置与高级导航功能实战
  • 2026芝麻灰石材 路沿石 火烧板 地铺石优质供应商推荐指南 - 资讯焦点
  • UE5定序器输出画质飞跃:巧用‘手动对焦平面’和这几个CVAR命令,告别画面发虚
  • AGI的“自我指涉”机制 vs 大模型的“模式回声”:1个被论文刻意回避的关键分水岭
  • 告别复制粘贴:用状态机重构你的FATFS工程,让SD卡文件操作更稳健
  • 5大核心优势:为何SI4735 Arduino库是广播接收器开发的革命性方案
  • 如何一键下载快手无水印视频?揭秘KS-Downloader的三大核心技术
  • 跨平台输入法词库转换终极指南:imewlconverter如何解决你的输入效率瓶颈
  • Windows快捷键冲突检测终极指南:3步解决热键失效问题
  • 避坑指南:AD09原理图库安装常见5大错误(附Library文件夹路径设置技巧)
  • 宝塔面板访问故障排查全流程:从阿里云安全组、系统防火墙到宝塔自身设置的保姆级指南
  • ESP32S3+W5500以太网模块实战:从硬件连接到TCP测速全流程(附代码)
  • 如何5分钟搞定Windows PDF处理:Poppler预编译包完整指南
  • 手把手教你申请Broadcom VCF 9.0测试版(附企业邮箱避坑指南)
  • 2026年武术学校推荐:登封市少林小龙武术学校,提供文武双修学历教育、全封闭军事化管理等多元服务 - 品牌推荐官
  • K210实战笔记:MicroPython解码STM32串口数据,驱动LCD实时显示
  • GetQzonehistory:3步永久保存QQ空间10年青春记忆
  • 企业级私有化部署指南:vscode-drawio离线绘图解决方案安全实现
  • Hunyuan-HY-MT1.8B如何优化?推理配置详解教程
  • 从零到一:基于ROS 2与Gazebo 9构建四轮差动机器人仿真平台
  • 2026届毕业生推荐的六大AI科研神器实际效果
  • SillyTavern AI对话前端平滑迁移指南:从旧版本到新版本的无缝升级策略
  • 从‘溃不成军’到‘横扫千军’:一个ADC课程项目版图Debug的全流程复盘与工具使用心得
  • 2026年常熟汽车贴膜机构精选名单,汽车贴膜门店附近汽车贴膜门店/靠谱的汽车贴膜门店 - 品牌策略师
  • SAP HCM 权限分析 工具篇