文件操作-with和上下文管理器
2024-08-22 20:21:12
代码:
# -*- coding:utf-8 -*-
# 普通版 如果写入的过程中出错 则不会释放资源
def m1():
f = open("test.txt","w")
f.write("hello python")
f.close()
# 进阶版
def m2():
f = open("test2.txt","w")
try:
f.write("hello python2")
except IOError:
print("oops error")
finally:
f.close()
# 高级
def m3():
with open("test3.txt","w") as f:
f.write("hello python3")
m1()
m2()
m3() # 上下文管理器
# 任何实现了 __enter__() 和 __exit__() 方法的对象都可称之为上下文管理器,上下文管理器对象可以使用 with 关键字。显然,文件(file)对象也实现了上下文管理器。
class File(object):
def __init__(self,filename,model):
self.filename = filename
self.model = model def __enter__(self):
print("--enter--")
self.f = open(self.filename,self.model)
return self.f def __exit__(self, *args):
print("--exit--")
self.f.close() with File("test4.txt","w") as f:
f.write("hello python4") # 输出 --enter--
# --exit - -
# 装饰器实现上下文管理器
from contextlib import contextmanager @contextmanager
def my_open(path,model,encod):
f = open(path,model,encoding=encod)
yield f
f.close() with my_open("test5.txt","w",'utf-8') as f:
f.write("contextmanager实现上下文管理器")
最新文章
- [Android]ListView学习笔记
- 解决ora-00054 Oracle锁表问题
- ubuntu NTP server 搭建
- Apache+Tomcat+mod_jk负载均衡
- OnItemSelectedListener事件与二级联动
- 【CCS仿真】如何将CCS仿真时memory中的数据以Hex、Integer、 Long 、Float、 Addressable Unit类型保存到PC
- 进入appstore中指定的应用
- kibana去掉丑陋的basic验证框,用自定义验证代替。
- 安装Hadoop系列 — 安装Eclipse
- Java图片上传压缩处理
- J2EE 关于WebLogic下应用使用URL.openConnection获取连接返回 HttpsURLConnection与SOAPHttpsURLConnection的问题
- Spring第九篇【Spring与Hibernate整合】
- BackgroundWorker 组件 -- 进度条
- Message";: ";请求的资源不支持 http 方法“GET”
- Luogu P3783 [SDOI2017]天才黑客
- java的抽象方法
- this作用范围
- [ ZooKeeper]ZooKeeper 的功能和原理
- 用 ASP.NET MVC 实现基于 XMLHttpRequest long polling(长轮询) 的 Comet(转)
- Yearning v1.3.0 发布,Web 端 SQL 审核平台
热门文章
- [转帖]为什么需要 Zookeeper
- 开发板与pc之间文件传输:kermit and lrzsz
- C++中的强制类型转换
- 经典例题(Python)
- day27——面向对象的总结、异常处理
- AVR单片机教程——拨动开关
- quartz2.3.0(十三)数据库持久化定时器job任务和trigger触发器,在多个调度器实例情况下,由其它调度器实例恢复执行调度器宕机的job任务
- Failed to transfer file: http://repo.maven.apache.org/maven2/xpp3/xpp3_min/1.1.4c/xpp3_min-1.1.4c.jar
- Java 理论和实践: 了解泛型 识别和避免学习使用泛型过程中的陷阱
- Spring Cloud Alibaba学习笔记(19) - Spring Cloud Gateway 自定义过滤器工厂