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 相关文章推荐
flask中使用SQLAlchemy进行辅助开发的代码
Feb 10 Python
python3访问sina首页中文的处理方法
Feb 24 Python
Python进程通信之匿名管道实例讲解
Apr 11 Python
Python自动调用IE打开某个网站的方法
Jun 03 Python
基于python中staticmethod和classmethod的区别(详解)
Oct 24 Python
Python实现的桶排序算法示例
Nov 29 Python
django模板语法学习之include示例详解
Dec 17 Python
python读取有密码的zip压缩文件实例
Feb 08 Python
Python之时间和日期使用小结
Feb 14 Python
分享一个pycharm专业版安装的永久使用方法
Sep 24 Python
Python PyPDF2模块安装使用解析
Jan 19 Python
python - timeit 时间模块
Apr 06 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使用array_search函数实现数组查找的方法
2015/06/12 PHP
php7基于递归实现删除空文件夹的方法示例
2017/06/15 PHP
实例讲解YII2中多表关联的使用方法
2017/07/21 PHP
php实现对短信验证码发送次数的限制实例讲解
2021/03/04 PHP
Prototype 1.5.0_rc1 及 Prototype 1.5.0 Pre0小抄本
2006/09/22 Javascript
javascript语句中的CDATA标签的意义
2007/05/09 Javascript
该如何加载google-analytics(或其他第三方)的JS
2010/05/13 Javascript
文本框中禁止非数字字符输入比如手机号码、邮编
2013/08/19 Javascript
JavaScript引用类型之基本包装类型实例分析【Boolean、Number和String】
2018/08/09 Javascript
vue组件之间数据传递的方法实例分析
2019/02/12 Javascript
Node.js中console.log()输出彩色字体的方法示例
2019/12/01 Javascript
JS几个常用的函数和对象定义与用法示例
2020/01/15 Javascript
解决vue.js中settimeout遇到的问题(时间参数短效果不稳定)
2020/07/21 Javascript
Vue 组件的挂载与父子组件的传值实例
2020/09/02 Javascript
Python实现竖排打印传单手机号码易撕条
2015/03/16 Python
Python批量更改文件名的实现方法
2017/10/29 Python
python实现教务管理系统
2018/03/12 Python
python实现批量图片格式转换
2020/06/16 Python
推荐10款最受Python开发者欢迎的Python IDE
2018/09/16 Python
Python变量类型知识点总结
2019/02/18 Python
Python将string转换到float的实例方法
2019/07/29 Python
Django 限制访问频率的思路详解
2019/12/24 Python
Python多线程threading join和守护线程setDeamon原理详解
2020/03/18 Python
Python3创建Django项目的几种方法(3种)
2020/06/03 Python
python 获取域名到期时间的方法步骤
2021/02/10 Python
Html5移动端适配IphoneX等机型的方法
2019/06/25 HTML / CSS
英国护肤品购物网站:Beauty Expert
2016/08/19 全球购物
网络教育自我鉴定
2014/02/04 职场文书
祖国在我心中演讲稿600字
2014/05/04 职场文书
2014年安全生产大检查方案
2014/05/13 职场文书
监督检查工作方案
2014/05/28 职场文书
作文评语集锦
2014/12/25 职场文书
学习雷锋精神活动总结
2015/02/06 职场文书
2016父亲节感恩话语
2015/12/09 职场文书
《时代广场的蟋蟀》读后感:真挚友情,温暖世界!
2020/01/08 职场文书
CSS3鼠标悬浮过渡缩放效果
2021/04/17 HTML / CSS