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 10 Python
详解appium+python 启动一个app步骤
Dec 20 Python
用python处理MS Word的实例讲解
May 08 Python
Python使用progressbar模块实现的显示进度条功能
May 31 Python
python基于itchat模块实现微信防撤回
Apr 29 Python
PyQt5组件读取参数的实例
Jun 25 Python
python fuzzywuzzy模块模糊字符串匹配详细用法
Aug 29 Python
Python列表操作方法详解
Feb 09 Python
python实现贪吃蛇游戏源码
Mar 21 Python
django实现后台显示媒体文件
Apr 07 Python
PHP基于phpqrcode类库生成二维码过程解析
May 28 Python
总结python多进程multiprocessing的相关知识
Jun 29 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 FPDF类库应用实现代码
2009/03/20 PHP
几个优化WordPress中JavaScript加载体验的插件介绍
2015/12/17 PHP
HTML5如何适配 iPhone IOS 底部黑条
2021/03/09 HTML / CSS
几行代码轻松搞定jquery实现flash8类似的连接效果
2007/05/03 Javascript
使弱类型的语言JavaScript变强势
2009/06/22 Javascript
dwz 如何去掉ajaxloading具体代码
2013/05/22 Javascript
JS字符串截取函数实例
2013/12/27 Javascript
JavaScript Promise启示录
2014/08/12 Javascript
推荐6款基于jQuery实现图片效果插件
2014/12/07 Javascript
使用jQuery mobile库检测url绝对地址和相对地址的方法
2015/12/04 Javascript
JS完成画圆圈的小球
2017/03/07 Javascript
vue2.0实现分页组件的实例代码
2017/06/22 Javascript
angularjs路由传值$routeParams详解
2020/09/05 Javascript
微信小程序实现动态设置placeholder提示文字及按钮选中/取消状态的方法
2017/12/14 Javascript
nodejs结合Socket.IO实现的即时通讯功能详解
2018/01/12 NodeJs
Mac下安装vue
2018/04/11 Javascript
JS canvas绘制五子棋的棋盘
2020/05/28 Javascript
react实现antd线上主题动态切换功能
2019/08/12 Javascript
微信小程序实现侧边栏分类
2019/10/21 Javascript
Vue项目中如何使用Axios封装http请求详解
2019/10/23 Javascript
vant自定义二级菜单操作
2020/11/02 Javascript
Taro小程序自定义顶部导航栏功能的实现
2020/12/17 Javascript
python八大排序算法速度实例对比
2017/12/06 Python
python 爬虫 批量获取代理ip的实例代码
2018/05/22 Python
分享vim python缩进等一些配置
2018/07/02 Python
pyhanlp安装介绍和简单应用
2019/02/22 Python
python调用摄像头拍摄数据集
2019/06/01 Python
Python 3.8 新功能全解
2019/07/25 Python
Django media static外部访问Django中的图片设置教程
2020/04/07 Python
Python自动化办公Excel模块openpyxl原理及用法解析
2020/11/05 Python
python抢购软件/插件/脚本附完整源码
2021/03/04 Python
日本7net购物网:书籍、漫画、杂志、DVD、游戏邮购
2017/02/17 全球购物
美国LOGO设计公司:The Logo Company
2018/07/16 全球购物
大学生实习期自我评价范文
2013/10/03 职场文书
导师推荐信范文
2014/05/09 职场文书
Win11快速关闭所有广告推荐
2022/04/19 数码科技