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之集合的关系
Sep 24 Python
解决nohup重定向python输出到文件不成功的问题
May 11 Python
使用python实现快速搭建简易的FTP服务器
Sep 12 Python
python实现将多个文件分配到多个文件夹的方法
Jan 07 Python
python opencv 读取图片 返回图片某像素点的b,g,r值的实现方法
Jul 03 Python
python cumsum函数的具体使用
Jul 29 Python
python 控制Asterisk AMI接口外呼电话的例子
Aug 08 Python
python GUI库图形界面开发之PyQt5 UI主线程与耗时线程分离详细方法实例
Feb 26 Python
Jupyter notebook运行Spark+Scala教程
Apr 10 Python
服务器端jupyter notebook映射到本地浏览器的操作
Apr 14 Python
如何真正的了解python装饰器
Aug 14 Python
python+excel接口自动化获取token并作为请求参数进行传参操作
Nov 10 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 生成文字png图片的代码
2011/04/17 PHP
PHP根据IP地址获取所在城市具体实现
2013/11/27 PHP
迪菲-赫尔曼密钥交换(Diffie?Hellman)算法原理和PHP实现版
2015/05/12 PHP
PHP读取mssql json数据中文乱码的解决办法
2016/04/11 PHP
php支付宝系列之电脑网站支付
2018/05/30 PHP
PHPUnit测试私有属性和方法功能示例
2018/06/12 PHP
基于jquery的一个简单的脚本验证插件
2010/04/05 Javascript
dess中一个简单的多路委托的实现
2010/07/20 Javascript
QUnit jQuery的TDD框架
2010/11/04 Javascript
jquery实现的可隐藏重现的靠边悬浮层实例代码
2013/05/27 Javascript
javascript的解析执行顺序在各个浏览器中的不同
2014/03/17 Javascript
jQuery实现ctrl+enter(回车)提交表单
2015/10/19 Javascript
jQuery实现form表单元素序列化为json对象的方法
2015/12/09 Javascript
Jquery ajax请求导出Excel表格的实现代码
2016/06/08 Javascript
jquery插件格式实例分析
2016/06/16 Javascript
jQuery animate easing使用方法图文详解
2016/06/17 Javascript
jQuery Easyui datagrid/treegrid 清空数据
2016/07/09 Javascript
Bootstrap缩略图与警告框学习使用
2017/02/08 Javascript
vue+Java后端进行调试时解决跨域问题的方式
2017/10/19 Javascript
swiper自定义分页器使用方法详解
2020/09/14 Javascript
js实现各浏览器全屏代码实例
2018/07/03 Javascript
vue的style绑定background-image的方式和其他变量数据的区别详解
2018/09/03 Javascript
Cocos2d实现刮刮卡效果
2018/12/20 Javascript
JavaScript实现抖音罗盘时钟
2019/10/11 Javascript
JS中==、===你分清楚了吗
2020/03/04 Javascript
[52:05]EG vs OG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
Python中模块string.py详解
2017/03/12 Python
PyQt5 pyqt多线程操作入门
2018/05/05 Python
python开启debug模式的方法
2019/06/27 Python
Django之PopUp的具体实现方法
2019/08/31 Python
如何利用python读取micaps文件详解
2020/10/18 Python
image-set实现Retina屏幕下图片显示详细介绍
2012/12/24 HTML / CSS
HTML5 input元素类型:email及url介绍
2013/08/13 HTML / CSS
幼儿园教师辞职信
2014/01/18 职场文书
竞选宣传委员演讲稿
2014/05/24 职场文书
副总经理党的群众路线教育实践活动个人对照检查材料思想汇报
2014/10/06 职场文书