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中的With语句
Feb 02 Python
Python中的赋值、浅拷贝、深拷贝介绍
Mar 09 Python
wxPython中listbox用法实例详解
Jun 01 Python
Python中几种导入模块的方式总结
Apr 27 Python
python绘制热力图heatmap
Mar 23 Python
python+flask实现API的方法
Nov 21 Python
python图形绘制奥运五环实例讲解
Sep 14 Python
利用4行Python代码监测每一行程序的运行时间和空间消耗
Apr 22 Python
使用Keras训练好的.h5模型来测试一个实例
Jul 06 Python
社区版pycharm创建django项目的方法(pycharm的newproject左侧没有项目选项)
Sep 23 Python
浅析python实现动态规划背包问题
Dec 31 Python
Python 可迭代对象 iterable的具体使用
Aug 07 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的分页功能
2007/03/21 PHP
php 参数过滤、数据过滤详解
2015/10/26 PHP
php 实现进制相互转换
2016/04/07 PHP
php curl简单采集图片生成base64编码(并附curl函数参数说明)
2019/02/15 PHP
PHP面向对象程序设计重载(overloading)操作详解
2019/06/13 PHP
JS对URL字符串进行编码/解码分析
2008/10/25 Javascript
Javascript Jquery 遍历Json的实现代码
2010/03/31 Javascript
在iframe里的页面编写js,实现在父窗口上创建动画效果展开和收缩的div(不变动iframe父窗口代码)
2011/12/20 Javascript
jQuery.prototype.init选择器构造函数源码思路分析
2013/02/05 Javascript
js获取域名的方法
2015/01/27 Javascript
《JavaScript高级编程》学习笔记之object和array引用类型
2015/11/01 Javascript
JS实现表单多文件上传样式美化支持选中文件后删除相关项
2016/09/30 Javascript
js获取地址栏中传递的参数(两种方法)
2017/02/08 Javascript
在vue项目中安装使用Mint-UI的方法
2017/12/27 Javascript
浅析node.js的模块加载机制
2018/05/25 Javascript
解决layUI的页面显示不全的问题
2019/09/20 Javascript
写一个Vue loading 插件
2020/11/09 Javascript
Element el-button 按钮组件的使用详解
2021/02/01 Javascript
[01:33:14]LGD vs VP Supermajor 败者组决赛 BO3 第二场 6.10
2018/07/04 DOTA
TensorFlow实现随机训练和批量训练的方法
2018/04/28 Python
Flask框架通过Flask_login实现用户登录功能示例
2018/07/17 Python
Ubuntu18.04下python版本完美切换的解决方法
2019/06/14 Python
Python递归函数 二分查找算法实现解析
2019/08/12 Python
pytorch梯度剪裁方式
2020/02/04 Python
使用Puppeteer爬取微信文章的实现
2020/02/11 Python
python实现猜拳游戏项目
2020/11/30 Python
企业演讲稿范文
2013/12/28 职场文书
2014年党员创先争优承诺书
2014/05/29 职场文书
中文专业自荐书
2014/06/29 职场文书
个人党性分析材料
2014/12/19 职场文书
幼儿园小班教师个人工作总结
2015/02/06 职场文书
党员评议自我评价
2015/03/03 职场文书
导游词之西江千户苗寨
2019/12/24 职场文书
使用css样式设计一个简单的html登陆界面的实现
2021/03/30 HTML / CSS
Go语言操作数据库及其常规操作的示例代码
2021/04/21 Golang
详解Python中__new__方法的作用
2022/03/31 Python