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中查找excel某一列的重复数据 剔除之后打印
Feb 10 Python
对python中执行DOS命令的3种方法总结
May 12 Python
python一键去抖音视频水印工具
Sep 14 Python
解决Shell执行python文件,传参空格引起的问题
Oct 30 Python
Python把对应格式的csv文件转换成字典类型存储脚本的方法
Feb 12 Python
python中logging模块的一些简单用法的使用
Feb 22 Python
django获取from表单multiple-select的value和id的方法
Jul 19 Python
python 命令行传入参数实现解析
Aug 30 Python
关于pymysql模块的使用以及代码详解
Sep 01 Python
python 内置函数汇总详解
Sep 16 Python
PyQt5.6+pycharm配置以及pyinstaller生成exe(小白教程)
Jun 02 Python
python中pd.cut()与pd.qcut()的对比及示例
Jun 16 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绘制一个矩形的方法
2015/01/24 PHP
PHP生成树的方法
2015/07/28 PHP
兼容多浏览器的字幕特效Marquee的通用js类
2008/07/20 Javascript
让浏览器非阻塞加载javascript的几种方法小结
2011/04/25 Javascript
js 有框架页面跳转(target)三种情况下的应用
2013/04/09 Javascript
JavaScript利用正则表达式去除日期中的-
2014/06/09 Javascript
jQuery右侧选项卡焦点图片轮播特效代码分享
2015/09/05 Javascript
Javascript中的几种继承方式对比分析
2016/03/22 Javascript
js两种拼接字符串的简单方法(必看)
2016/09/02 Javascript
微信小程序实现移动端滑动分页效果(ajax)
2017/06/13 Javascript
import与export在node.js中的使用详解
2017/09/28 Javascript
web前端vue之CSS过渡效果示例
2018/01/10 Javascript
vue 实现axios拦截、页面跳转和token 验证
2018/07/17 Javascript
在React项目中使用Eslint代码检查工具及常见问题
2018/10/10 Javascript
在微信小程序中保存网络图片
2019/02/12 Javascript
浅谈Vue的响应式原理
2019/05/30 Javascript
python绘图库Matplotlib的安装
2014/07/03 Python
Python fileinput模块使用实例
2015/06/03 Python
python类和继承用法实例
2015/07/07 Python
python爬虫使用cookie登录详解
2017/12/27 Python
python实现简易云音乐播放器
2018/01/04 Python
Python实现读取及写入csv文件的方法示例
2018/01/12 Python
PyQt5每天必学之弹出消息框
2018/04/19 Python
解决Tensorflow2.0 tf.keras.Model.load_weights() 报错处理问题
2020/06/12 Python
PyTorch中clone()、detach()及相关扩展详解
2020/12/09 Python
用HTML5实现手机摇一摇的功能的教程
2012/10/30 HTML / CSS
布鲁明戴尔百货店:Bloomingdale’s
2016/12/21 全球购物
幼儿教师研修感言
2014/02/12 职场文书
彩妆大赛策划方案
2014/05/13 职场文书
租房协议书范文
2014/08/20 职场文书
奖学金感谢信
2015/01/21 职场文书
考试作弊检讨书
2015/01/27 职场文书
奖励申请报告范文
2015/05/15 职场文书
婚礼男方父母答谢词
2015/09/29 职场文书
阳光体育运动标语口号
2015/12/26 职场文书
导游词之云南-元阳梯田
2019/10/08 职场文书