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中无限元素列表的实现方法
Aug 18 Python
Python中使用partial改变方法默认参数实例
Apr 28 Python
python通过pip更新所有已安装的包实现方法
May 19 Python
Python 列表理解及使用方法
Oct 27 Python
python 以16进制打印输出的方法
Jul 09 Python
Python sklearn KFold 生成交叉验证数据集的方法
Dec 11 Python
python利用selenium进行浏览器爬虫
Apr 25 Python
Python 转换RGB颜色值的示例代码
Oct 13 Python
python获取百度热榜链接的实例方法
Aug 25 Python
用python绘制樱花树
Oct 09 Python
Django框架实现在线考试系统的示例代码
Nov 30 Python
Python爬虫自动化爬取b站实时弹幕实例方法
Jan 26 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
如何将数据从文本导入到mysql
2006/10/09 PHP
PHP面向对象三大特点学习(充分理解抽象、封装、继承、多态)
2012/05/07 PHP
zend framework配置操作数据库实例分析
2012/12/06 PHP
PHP获取日期对应星期、一周日期、星期开始与结束日期的方法
2018/06/22 PHP
在IE中调用javascript打开Excel的代码(downmoon原作)
2007/04/02 Javascript
JQuery实现倒计时按钮的实现代码
2012/03/23 Javascript
基于JQuery模仿苹果桌面的Dock效果(初级版)
2012/10/15 Javascript
通过location.replace禁止浏览器后退防止重复提交
2014/09/04 Javascript
原生js三级联动的简单实现代码
2016/06/07 Javascript
wap手机端解决返回上一页的js实例
2016/12/08 Javascript
AngularJS模仿Form表单提交的实现代码
2016/12/08 Javascript
JS解决移动web开发手机输入框弹出的问题
2017/03/31 Javascript
AngularJS中使用three.js的实例详解
2017/07/21 Javascript
Vue-Router模式和钩子的用法
2018/02/28 Javascript
浅析node应用的timing-attack安全漏洞
2018/02/28 Javascript
代码实例ajax实现点击加载更多数据图片
2018/10/12 Javascript
vue使用i18n实现国际化的方法详解
2019/09/05 Javascript
vue 实现特定条件下绑定事件
2019/11/09 Javascript
vue移动端下拉刷新和上滑加载
2020/10/27 Javascript
[03:22]DAC最前线(第二期)—DOTA2亚洲邀请赛主赛场周边及线路探访
2015/01/24 DOTA
Python常用内置模块之xml模块(详解)
2017/05/23 Python
python爬虫入门教程--正则表达式完全指南(五)
2017/05/25 Python
python数据类型判断type与isinstance的区别实例解析
2017/10/31 Python
Python+Pandas 获取数据库并加入DataFrame的实例
2018/07/25 Python
django 多对多表的创建和插入代码实现
2019/09/09 Python
pytorch中的transforms模块实例详解
2019/12/31 Python
浅谈python的elementtree模块处理中文注意事项
2020/03/06 Python
canvas裁剪clip()函数的具体使用
2018/03/01 HTML / CSS
请问如下代码执行后a和b的值分别是什么
2016/05/05 面试题
会计辞职信范文
2014/01/15 职场文书
优秀员工推荐信
2014/05/10 职场文书
行政专员岗位职责范本
2014/08/26 职场文书
庆七一活动总结
2014/08/27 职场文书
担保书范本
2015/01/20 职场文书
Requests什么的通通爬不了的Python超强反爬虫方案!
2021/05/20 Python
使用Ajax实现无刷新上传文件
2022/04/12 Javascript