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实现的金山快盘的签到程序
Jan 17 Python
python实现class对象转换成json/字典的方法
Mar 11 Python
Python三级目录展示的实现方法
Sep 28 Python
Python内置函数 next的具体使用方法
Nov 24 Python
python 列表删除所有指定元素的方法
Apr 19 Python
python中cPickle类使用方法详解
Aug 27 Python
Python实现将通信达.day文件读取为DataFrame
Dec 22 Python
selenium python 实现基本自动化测试的示例代码
Feb 25 Python
pyqt5中QThread在使用时出现重复emit的实例
Jun 21 Python
基于Django实现日志记录报错信息
Dec 17 Python
Pymysql实现往表中插入数据过程解析
Jun 02 Python
基于PyTorch的permute和reshape/view的区别介绍
Jun 18 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自定义大小验证码的方法详解
2013/06/07 PHP
Symfony2使用第三方库Upload制作图片上传实例详解
2016/02/04 PHP
php遍历解析xml字符串的方法
2016/05/05 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
2019/11/21 PHP
jquery ajax提交表单数据的两种实现方法
2010/04/29 Javascript
jquery命令汇总,方便使用jquery的朋友
2012/06/26 Javascript
jQuery Deferred和Promise创建响应式应用程序详细介绍
2013/03/05 Javascript
javascript使用location.search的示例
2013/11/05 Javascript
jquery中 $.expr使用实例介绍
2014/06/09 Javascript
JavaScript中使用stopPropagation函数停止事件传播例子
2014/08/27 Javascript
javascript常用函数(1)
2015/11/04 Javascript
Javascript编程之继承实例汇总
2015/11/28 Javascript
jquery ztree实现树的搜索功能
2016/02/25 Javascript
request请求获取参数的实现方法(post和get两种方式)
2016/09/27 Javascript
移动端手指放大缩小插件与js源码
2017/05/22 Javascript
浅谈对Angular中的生命周期钩子的理解
2017/07/31 Javascript
AJAX XMLHttpRequest对象创建使用详解
2020/08/20 Javascript
Python专用方法与迭代机制实例分析
2014/09/15 Python
Python数据可视化库seaborn的使用总结
2019/01/15 Python
python实现的生成word文档功能示例
2019/08/23 Python
python获取栅格点和面值的实现
2020/03/10 Python
基于python tkinter的点名小程序功能的实例代码
2020/08/22 Python
Python的信号库Blinker用法详解
2020/12/31 Python
用python-webdriver实现自动填表的示例代码
2021/01/13 Python
利用CSS3的transform做的动态时钟效果
2011/09/21 HTML / CSS
法国票务网站:Ticketmaster法国
2018/07/09 全球购物
大一学生职业生涯规划
2014/03/11 职场文书
5s推行计划书
2014/05/06 职场文书
理想点亮人生演讲稿
2014/05/21 职场文书
承诺书范文
2014/06/03 职场文书
教师听课评语大全
2014/12/31 职场文书
2017公司年会主持人开幕词
2016/03/04 职场文书
MySQL Innodb关键特性之插入缓冲(insert buffer)
2021/04/08 MySQL
Vue接口封装的完整步骤记录
2021/05/14 Vue.js
TV动画《神废柴☆偶像》公布先导PV
2022/03/20 日漫
Docker容器harbor私有仓库部署和管理
2022/08/05 Servers