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 相关文章推荐
linux系统使用python监测系统负载脚本分享
Jan 15 Python
java直接调用python脚本的例子
Feb 16 Python
python自动化测试实例解析
Sep 28 Python
python实现通过pil模块对图片格式进行转换的方法
Mar 24 Python
常见的在Python中实现单例模式的三种方法
Apr 08 Python
详解Python装饰器由浅入深
Dec 09 Python
关于Python 3中print函数的换行详解
Aug 08 Python
tensorflow更改变量的值实例
Jul 30 Python
对Python3 * 和 ** 运算符详解
Feb 16 Python
Django CSRF认证的几种解决方案
Mar 03 Python
Python pip使用超时问题解决方案
Aug 03 Python
Python爬虫之Selenium实现键盘事件
Dec 04 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 配置open_basedir 让各虚拟站点独立运行
2009/11/12 PHP
php中mysql操作buffer用法详解
2015/03/19 PHP
php获取系统变量方法小结
2015/05/29 PHP
php简单的上传类分享
2016/05/15 PHP
PHP pthreads v3使用中的一些坑和注意点分析
2020/02/21 PHP
数组Array进行原型prototype扩展后带来的for in遍历问题
2010/02/07 Javascript
javascript教程之不完整的继承(js原型链)
2014/01/13 Javascript
jquery中 $.expr使用实例介绍
2014/06/09 Javascript
EasyUI闪屏EasyUI页面加载提示(原理+代码+效果图)
2016/02/21 Javascript
基于JS代码实现图片在页面中旋转效果
2016/06/16 Javascript
JS实现微信里判断页面是否被分享成功的方法
2017/06/06 Javascript
Vue学习之路之登录注册实例代码
2017/07/06 Javascript
用react-redux实现react组件之间数据共享的方法
2018/06/08 Javascript
详解easyui基于 layui.laydate日期扩展组件
2018/07/18 Javascript
微信小程序自定义toast弹窗效果的实现代码
2018/11/15 Javascript
解决layer弹出层msg的文字不显示的问题
2019/09/11 Javascript
微信小程序实现音乐播放器
2019/11/20 Javascript
Python中捕捉详细异常信息的代码示例
2014/09/18 Python
详谈python3中用for循环删除列表中元素的坑
2018/04/19 Python
Python sep参数使用方法详解
2020/02/12 Python
python如何随机生成高强度密码
2020/08/19 Python
Python使用pycharm导入pymysql教程
2020/09/16 Python
PyCharm 2020.1版安装破解注册码永久激活(激活到2089年)
2020/09/24 Python
python利用platform模块获取系统信息
2020/10/09 Python
Python3使用 GitLab API 进行批量合并分支
2020/10/15 Python
Python实现手势识别
2020/10/21 Python
世界最大的票务市场:viagogo
2017/02/16 全球购物
SQL语言面试题
2013/08/27 面试题
医学专业毕业生个人的求职信
2013/12/04 职场文书
硕士研究生个人求职信
2013/12/04 职场文书
校园十佳歌手策划书
2014/01/22 职场文书
农民工创业典型事迹
2014/01/25 职场文书
会计岗位描述
2014/02/22 职场文书
个人函授自我鉴定
2014/03/25 职场文书
学校周年庆活动方案
2014/08/22 职场文书
Vue3如何理解ref toRef和toRefs的区别
2022/02/18 Vue.js