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实现的希尔排序算法实例
Jul 01 Python
Python基础知识_浅谈用户交互
May 31 Python
python读取二进制mnist实例详解
May 31 Python
Python中的pygal安装和绘制直方图代码分享
Dec 08 Python
python判断列表的连续数字范围并分块的方法
Nov 16 Python
python如何实现数据的线性拟合
Jul 19 Python
Django models.py应用实现过程详解
Jul 29 Python
python如何爬取动态网站
Sep 09 Python
PyCharm中关于安装第三方包的三个建议
Sep 17 Python
python调用有道智云API实现文件批量翻译
Oct 10 Python
用python对excel查重
Dec 07 Python
OpenCV全景图像拼接的实现示例
Jun 05 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
无线电广播与收音机发展的历史回眸
2021/03/02 无线电
php HandlerSocket的使用
2011/05/02 PHP
Zend的MVC机制使用分析(一)
2013/05/02 PHP
解析file_get_contents模仿浏览器头(user_agent)获取数据
2013/06/27 PHP
php socket通信简单实现
2016/11/18 PHP
Yii框架安装简明教程
2020/05/15 PHP
非常漂亮的JS代码经典广告
2007/10/21 Javascript
一个js的tab切换效果代码[代码分离]
2010/04/11 Javascript
可兼容IE的获取及设置cookie的jquery.cookie函数方法
2013/09/02 Javascript
修改jquery中dialog的title属性方法(推荐)
2016/08/26 Javascript
微信小程序 textarea 详解及简单使用方法
2016/12/05 Javascript
javascript实现非常简单的小数取整功能示例
2017/06/13 Javascript
让网站自动生成章节目录索引的多个js代码
2018/01/07 Javascript
JS代码屏蔽F12,右键,粘贴,复制,剪切,选中,操作实例
2019/09/17 Javascript
JavaScript中的相等操作符使用详解
2019/12/21 Javascript
浅谈element中InfiniteScroll按需引入的一点注意事项
2020/06/05 Javascript
vue 出现data-v-xxx的原因及解决
2020/08/04 Javascript
[58:25]VP vs RNG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
[02:58]魔廷新尊——痛苦女王至宝语音台词节选
2020/06/14 DOTA
[01:18:31]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第一场 1月10日
2021/03/11 DOTA
Python实现截屏的函数
2015/07/26 Python
在arcgis使用python脚本进行字段计算时是如何解决中文问题的
2015/10/18 Python
python并发编程多进程 模拟抢票实现过程
2019/08/20 Python
python使用协程实现并发操作的方法详解
2019/12/27 Python
Python中实现输入超时及如何通过变量获取变量名
2020/01/18 Python
Python3.7安装pyaudio教程解析
2020/07/24 Python
python 使用elasticsearch 实现翻页的三种方式
2020/07/31 Python
python如何修改文件时间属性
2021/02/05 Python
详解CSS3 Media Queries中媒体属性的使用
2016/02/29 HTML / CSS
内部类的定义、种类以及优点
2013/10/16 面试题
化工专业应届生求职信
2013/11/08 职场文书
优秀医生事迹材料
2014/02/12 职场文书
2015年清明节网上祭英烈活动总结
2015/03/26 职场文书
战友聚会致辞
2015/07/28 职场文书
导游词之西安骊山
2019/12/20 职场文书
MySQL 分页查询的优化技巧
2021/05/12 MySQL