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查找第k小元素代码分享
Dec 18 Python
python文件操作整理汇总
Oct 21 Python
python登陆asp网站页面的实现代码
Jan 14 Python
简单的python后台管理程序
Apr 13 Python
Python subprocess模块详细解读
Jan 29 Python
python编程测试电脑开启最大线程数实例代码
Feb 09 Python
Python File(文件) 方法整理
Feb 18 Python
python实现飞机大战游戏
Oct 26 Python
Python实现九宫格式的朋友圈功能内附“马云”朋友圈
May 07 Python
python使用装饰器作日志处理的方法
Jul 11 Python
Python中的np.argmin()和np.argmax()函数用法
Jun 02 Python
Python采集股票数据并制作可视化柱状图
Apr 04 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/02/17 PHP
PHP基于imap获取邮件实例
2014/11/11 PHP
用HTML/JS/PHP方式实现页面延时跳转的简单实例
2016/07/18 PHP
laravel自定义分页效果
2017/07/23 PHP
PHP静态方法和静态属性及常量属性的区别与介绍
2019/03/22 PHP
Laravel5.5 实现后台管理登录的方法(自定义用户表登录)
2019/09/30 PHP
PHP实用小技巧之调用录像的方法
2019/12/05 PHP
Jquery选择器 $实现原理
2009/12/02 Javascript
JS实现从表格中动态删除指定行的方法
2015/03/31 Javascript
在JavaScript中使用开平方根的sqrt()方法
2015/06/15 Javascript
每天一篇javascript学习小结(String对象)
2015/11/18 Javascript
使用bootstrap3开发响应式网站
2016/05/12 Javascript
node网页分段渲染详解
2016/09/05 Javascript
AngularJs入门教程之环境搭建+创建应用示例
2016/11/01 Javascript
详解前端构建工具gulpjs的使用介绍及技巧
2017/01/19 Javascript
基于JQuery和原生JavaScript实现网页定位导航特效
2017/04/03 jQuery
巧用weui.topTips验证数据的实例
2017/04/17 Javascript
Node.JS段点续传:Nginx配置文件分段下载功能的实现方法
2018/03/12 Javascript
vue.js学习笔记之v-bind和v-on解析
2018/05/03 Javascript
JavaScript实现构造json数组的方法分析
2018/08/17 Javascript
[40:01]OG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python计算程序开始到程序结束的运行时间和程序运行的CPU时间
2013/11/28 Python
Python中操作文件之write()方法的使用教程
2015/05/25 Python
基于Python实现的ID3决策树功能示例
2018/01/02 Python
python实现决策树、随机森林的简单原理
2018/03/26 Python
浅析python参数的知识点
2018/12/10 Python
Python读取Pickle文件信息并计算与当前时间间隔的方法分析
2019/01/30 Python
Python 使用 prettytable 库打印表格美化输出功能
2019/12/26 Python
Python 如何批量更新已安装的库
2020/05/26 Python
Lacoste(法国鳄鱼)加拿大官网:以标志性的POLO衫而闻名
2019/05/15 全球购物
金属材料工程毕业生个人的自我评价
2013/11/28 职场文书
捐款倡议书格式范文
2014/05/14 职场文书
2015年端午节活动总结
2015/02/11 职场文书
2015年教师业务工作总结
2015/05/26 职场文书
学前班教学反思
2016/02/24 职场文书
MybatisPlus代码生成器的使用方法详解
2021/06/13 Java/Android