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计算最大优先级队列实例
Dec 18 Python
Python AES加密模块用法分析
May 22 Python
利用信号如何监控Django模型对象字段值的变化详解
Nov 27 Python
pygame游戏之旅 载入小车图片、更新窗口
Nov 20 Python
Python实现带下标索引的遍历操作示例
May 30 Python
django自带调试服务器的使用详解
Aug 29 Python
如何使用Python发送HTML格式的邮件
Feb 11 Python
浅谈python 中的 type(), dtype(), astype()的区别
Apr 09 Python
python palywright库基本使用
Jan 21 Python
python3.7.2 tkinter entry框限定输入数字的操作
May 22 Python
Python字典的基础操作
Nov 01 Python
python调用ffmpeg命令行工具便捷操作视频示例实现过程
Nov 01 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判断数据库中的记录是否存在的方法
2014/11/14 PHP
Symfony2框架创建项目与模板设置实例详解
2016/03/17 PHP
功能强大的PHP发邮件类
2016/08/29 PHP
PHP 进度条函数的简单实例
2017/09/19 PHP
PHP迭代器和生成器用法实例分析
2019/09/28 PHP
javascript showModalDialog 多层模态窗口实现页面提交及刷新的代码
2009/11/28 Javascript
jquery 问答知识整理
2010/02/11 Javascript
jquery判断checkbox(复选框)是否被选中的代码
2010/10/20 Javascript
Web前端设计模式  制作漂亮的弹出层
2010/10/29 Javascript
javascript写的日历类(基于pj)
2010/12/28 Javascript
分享20款好玩的jQuery游戏
2011/04/17 Javascript
jquery.fileEveryWhere.js 一个跨浏览器的file显示插件
2011/10/24 Javascript
js 调用父窗口的具体实现代码
2013/07/15 Javascript
通过复制Table生成word和excel的javascript代码
2014/01/20 Javascript
Jquery遍历节点的方法小集
2014/01/22 Javascript
jquery禁止输入数字以外的字符的示例(纯数字验证码)
2014/04/10 Javascript
IE中getElementsByName()对有些元素无效的解决方案
2014/09/28 Javascript
JavaScript从数组中删除指定值元素的方法
2015/03/18 Javascript
深入理解JavaScript编程中的原型概念
2015/06/25 Javascript
jQuery插件jquery-barcode实现条码打印的方法
2015/11/25 Javascript
Bootstrap基本样式学习笔记之表单(3)
2016/12/07 Javascript
vue中img src 动态加载本地json的图片路径写法
2019/04/25 Javascript
[42:39]老党炸弹人试玩视频
2014/09/03 DOTA
python中urlparse模块介绍与使用示例
2017/11/19 Python
python使用itchat库实现微信机器人(好友聊天、群聊天)
2018/01/04 Python
python生成九宫格图片
2018/11/19 Python
python统计字符的个数代码实例
2020/02/07 Python
马来西亚太阳镜、眼镜和隐形眼镜网上商店:Focus Point
2018/12/13 全球购物
Java面试题及答案
2012/09/08 面试题
见习报告的格式
2014/10/31 职场文书
学前班学生评语
2014/12/29 职场文书
2015年物资管理工作总结
2015/05/20 职场文书
法律意见书范本
2015/06/04 职场文书
python 远程执行命令的详细代码
2022/02/15 Python
MySQL中一条update语句是如何执行的
2022/03/16 MySQL
openEuler 搭建java开发环境的详细过程
2022/06/10 Servers