Python with关键字,上下文管理器,@contextmanager文件操作示例


Posted in Python onOctober 17, 2019

本文实例讲述了Python with关键字,上下文管理器,@contextmanager文件操作。分享给大家供大家参考,具体如下:

demo.py(with 打开文件):

# open 方法的返回值赋值给变量 f,当离开 with 代码块的时候,系统会自动调用 f.close() 方法
# with 的作用和使用 try/finally 语句是一样的。
with open("output.txt", "r") as f:
  f.write("XXXXX")

demo.py(with,上下文管理器):

# 自定义的MyFile类
# 实现了 __enter__() 和 __exit__() 方法的对象都可称之为上下文管理器
class MyFile():
  def __init__(self, filename, mode):
    self.filename = filename
    self.mode = mode
  def __enter__(self):
    print("entering")
    self.f = open(self.filename, self.mode)
    return self.f
  # with代码块执行完或者with中发生异常,就会自动执行__exit__方法。
  def __exit__(self, *args):
    print("will exit")
    self.f.close()
# 会自动调用MyFile对象的__enter__方法,并将返回值赋给f变量。
with MyFile('out.txt', 'w') as f:
  print("writing")
  f.write('hello, python')
  # 当with代码块执行结束,或出现异常时,会自动调用MyFile对象的__exit__方法。

demo.py(实现上下文管理器的另一种方式):

from contextlib import contextmanager
@contextmanager
def my_open(path, mode):
  f = open(path, mode)
  yield f
  f.close()
# 将my_open函数中yield后的变量值赋给f变量。
with my_open('out.txt', 'w') as f:
  f.write("XXXXX")
  # 当with代码块执行结束,或出现异常时,会自动执行yield后的代码。

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python使用PyFetion来发送短信的例子
Apr 22 Python
web.py在SAE中的Session问题解决方法(使用mysql存储)
Jun 24 Python
浅谈python多线程和队列管理shell程序
Aug 04 Python
Python中的FTP通信模块ftplib的用法整理
Jul 08 Python
python 将字符串转换成字典dict的各种方式总结
Mar 23 Python
解决python ogr shp字段写入中文乱码的问题
Dec 31 Python
python基于socket进行端口转发实现后门隐藏的示例
Jul 25 Python
Python实现朴素贝叶斯的学习与分类过程解析
Aug 24 Python
django序列化serializers过程解析
Dec 14 Python
Tensorflow轻松实现XOR运算的方式
Feb 03 Python
python中安装django模块的方法
Mar 12 Python
python海龟绘图之画国旗实例代码
Nov 11 Python
浅析Python+OpenCV使用摄像头追踪人脸面部血液变化实现脉搏评估
Oct 17 #Python
Python 3.8正式发布重要新功能一览
Oct 17 #Python
Python 装饰器@,对函数进行功能扩展操作示例【开闭原则】
Oct 17 #Python
python实现复制文件到指定目录
Oct 16 #Python
如何解决django-celery启动后迅速关闭
Oct 16 #Python
Python发送邮件的实例代码讲解
Oct 16 #Python
python运用sklearn实现KNN分类算法
Oct 16 #Python
You might like
地摊中国 - 珍藏老照片
2020/08/18 杂记
php设计模式 Visitor 访问者模式
2011/06/28 PHP
php实现水仙花数示例分享
2014/04/03 PHP
PHP函数getenv简介和使用实例
2014/05/12 PHP
php页面缓存方法小结
2015/01/10 PHP
Zend Framework基本页面布局分析
2016/03/19 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
2017/11/16 PHP
javascript indexOf函数使用说明
2008/07/03 Javascript
innerhtml用法 innertext用法 以及innerHTML与innertext的区别
2009/10/26 Javascript
javascript 进阶篇3 Ajax 、JSON、 Prototype介绍
2012/03/14 Javascript
javascript 兼容所有浏览器的DOM扩展功能
2012/08/01 Javascript
Get中文乱码IE浏览器Get中文乱码解决方案
2013/12/26 Javascript
jquery和javascript中如何将一元素的内容赋给另一元素
2014/01/09 Javascript
jquery+json实现数据二级联动的方法
2015/11/28 Javascript
jquery插件EasyUI中form表单提交实例分享
2016/01/11 Javascript
vue实现组件之间传值功能示例
2018/07/13 Javascript
React路由鉴权的实现方法
2019/09/05 Javascript
[05:08]2014DOTA2国际邀请赛 Hao专访复仇的胜利很爽
2014/07/15 DOTA
[44:43]完美世界DOTA2联赛决赛日 FTD vs GXR 第一场 11.08
2020/11/11 DOTA
python实现数据写入excel表格
2018/03/25 Python
Python中的异常处理try/except/finally/raise用法分析
2019/02/28 Python
flask的orm框架SQLAlchemy查询实现解析
2019/12/12 Python
详解用 python-docx 创建浮动图片
2021/01/24 Python
Myprotein法国官网:欧洲第一运动营养品牌
2019/03/26 全球购物
委托与事件是什么关系?为什么要使用委托
2014/04/18 面试题
数控专业推荐信范文
2013/12/02 职场文书
高中生期末评语
2014/01/28 职场文书
大队委竞选演讲稿
2014/04/28 职场文书
幼儿园教师演讲稿
2014/05/06 职场文书
尊老爱幼演讲稿
2014/09/04 职场文书
镇人大副主席民主生活会对照检查材料思想汇报
2014/10/01 职场文书
2014年督导工作总结
2014/11/19 职场文书
2014年药品销售工作总结
2014/12/16 职场文书
教师先进个人材料
2014/12/17 职场文书
运动会致辞稿
2015/07/29 职场文书
Win11怎么进入安全模式?Windows 11进入安全模式的方法
2021/11/21 数码科技