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实现一个音乐检索器的功能
Nov 15 Python
Python语言生成水仙花数代码示例
Dec 18 Python
对python xlrd读取datetime类型数据的方法详解
Dec 26 Python
Python使用字典的嵌套功能详解
Feb 27 Python
python实现字符串加密 生成唯一固定长度字符串
Mar 22 Python
Python学习笔记之变量、自定义函数用法示例
May 28 Python
Python实现简单的列表冒泡排序和反转列表操作示例
Jul 10 Python
详解Python中字符串前“b”,“r”,“u”,“f”的作用
Dec 18 Python
TensorFlow使用Graph的基本操作的实现
Apr 22 Python
Django Form设置文本框为readonly操作
Jul 03 Python
Python图像读写方法对比
Nov 16 Python
Python序列化模块JSON与Pickle
Jun 05 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
PHP Pear 安装及使用
2009/03/19 PHP
thinkPHP多表查询及分页功能实现方法示例
2017/07/03 PHP
PHP7 参数处理机制修改
2021/03/09 PHP
baidu博客的编辑友情链接的新的层窗口!经典~支持【FF】
2007/02/09 Javascript
动态调用css文件——jquery的应用
2007/02/20 Javascript
JS遮罩层效果 兼容ie firefox jQuery遮罩层
2010/07/26 Javascript
ExtJS 入门
2010/10/29 Javascript
从jQuery.camelCase()学习string.replace() 函数学习
2011/09/13 Javascript
高效率JavaScript编写技巧整理
2013/08/23 Javascript
jquery链式操作的正确使用方法
2014/01/06 Javascript
JavaScript 实现简单的倒计时弹窗DEMO附图
2014/03/05 Javascript
jQuery自定义图片缩放拖拽插件imageQ实现方法(附demo源码下载)
2016/05/27 Javascript
JS简单判断滚动条的滚动方向实现方法
2017/04/28 Javascript
Node.js使用orm2进行update操作时关联字段无法修改的解决方法
2017/06/13 Javascript
Angular实现的日程表功能【可添加及隐藏显示内容】
2017/12/27 Javascript
Angular实现的自定义模糊查询、排序及三角箭头标注功能示例
2017/12/28 Javascript
微信小程序时间标签和时间范围的联动效果
2019/02/15 Javascript
解决IOS端微信H5页面软键盘弹起后页面下方留白的问题
2019/06/05 Javascript
Vue Element UI + OSS实现上传文件功能
2019/07/31 Javascript
[03:18]DOTA2亚洲邀请赛小组赛第一日 RECAP赛事回顾
2015/01/30 DOTA
python使用selenium登录QQ邮箱(附带滑动解锁)
2019/01/23 Python
python实现批量nii文件转换为png图像
2019/07/18 Python
keras 简单 lstm实例(基于one-hot编码)
2020/07/02 Python
45个非常奇妙的CSS3 特性应用示例
2012/01/01 HTML / CSS
美国知名生活购物网站:Goop
2017/11/03 全球购物
选购国际女性时装设计师品牌:IFCHIC(支持中文)
2018/04/12 全球购物
什么是用户模式(User Mode)与内核模式(Kernel Mode) ?
2015/09/07 面试题
大学毕业生的自我鉴定
2013/11/30 职场文书
绩效管理实施方案
2014/03/19 职场文书
租房协议书怎么写
2014/04/10 职场文书
数学教研活动总结
2014/07/02 职场文书
留学推荐信英文范文
2015/03/26 职场文书
部门经理助理岗位职责
2015/04/13 职场文书
工商行政处罚决定书
2015/06/24 职场文书
python munch库的使用解析
2021/05/25 Python
dubbo服务整合zipkin详解
2021/07/26 Java/Android