文件操作-with和上下文管理器

代码:

 1 # -*- coding:utf-8 -*-
 2 # 普通版 如果写入的过程中出错 则不会释放资源
 3 def m1():
 4     f = open("test.txt","w")
 5     f.write("hello python")
 6     f.close()
 7 # 进阶版
 8 def m2():
 9     f = open("test2.txt","w")
10     try:
11         f.write("hello python2")
12     except IOError:
13         print("oops error")
14     finally:
15         f.close()
16 # 高级
17 def m3():
18     with open("test3.txt","w") as f:
19         f.write("hello python3")
20 m1()
21 m2()
22 m3()
23
24 # 上下文管理器
25 # 任何实现了 __enter__() 和 __exit__() 方法的对象都可称之为上下文管理器,上下文管理器对象可以使用 with 关键字。显然,文件(file)对象也实现了上下文管理器。
26 class File(object):
27     def __init__(self,filename,model):
28         self.filename = filename
29         self.model = model
30
31     def __enter__(self):
32         print("--enter--")
33         self.f = open(self.filename,self.model)
34         return self.f
35
36     def __exit__(self, *args):
37         print("--exit--")
38         self.f.close()
39
40 with File("test4.txt","w") as f:
41     f.write("hello python4")   # 输出  --enter--
42                                     # --exit - -
43 # 装饰器实现上下文管理器
44 from contextlib import contextmanager
45
46 @contextmanager
47 def my_open(path,model,encod):
48     f = open(path,model,encoding=encod)
49     yield f
50     f.close()
51
52 with my_open("test5.txt","w",‘utf-8‘) as f:
53     f.write("contextmanager实现上下文管理器")

原文地址:https://www.cnblogs.com/yifengs/p/11438457.html

时间: 2024-10-09 10:24:07

文件操作-with和上下文管理器的相关文章

with和上下文管理器

with和上下文管理器 如果你有时间阅读源码的习惯,可能会看到一些优秀的代码会出现带有with关键字的语句. 对于系统资源如文件,数据库连接,socket而言,应用程序打开这些资源并执行完业务逻辑之后,必须要做的事情就是关闭该资源. 在上篇文件中,我们读写文件操作,完毕之后,关闭文件对象.调用close方法,下面来看看如何正确的关闭一个文件. 普通版 def func(): f = open("1.txt", "w") f.write("Python&qu

个人的后门程序开发(第一部分):文件操作和注册表管理

本来是想寒假时写的,结果一直懒得动手. 虽然手上有ghost源码,但是感觉功能不是我想要的,比如把精力费在学MFC写界面上不如改进下隐藏性. 基本的计划就是做一个后门程序,目的是用来进行权限维持的.目前来看是基于控制台的,而且要带有内核模块,应用层的主要问题就是没写过太大体量的程序导致搞起来很蛋疼,内核方面就是通用性坑爹, 蓝屏起来也要费时间. 第一部分就是封装的两个函数,文件操作和注册表管理.ghost是把这两个功能封装成两个类,我这里就直接用函数来实现了. VS2015编译通过 1 //文件

SQLServer2000安装失败,[ODBC 驱动程序管理器]未发现数据源,详细信息请查看日志文件 sql2000 [Microsoft][ODBC 驱动程序管理器] 未发现数据源,参见sqlstp.org,直接退出

SQL2000安装失败,[ODBC 驱动程序管理器]未发现数据源,详细信息请查看日志文件 (2010-09-13 17:38:18) 转载▼ 最近安装数据库sql server2000时安装到要结束的时候,一下跳出"SQL2000安装失败,[ODBC 驱动程序管理器]未发现数据源,详细信息请查看日志文件"提示,一点确定就关闭,在网上找了好多,试了好多都不能解决,但是功夫不负有心人啊,最后终于找到了解决办法,在这跟大家分享下: 具体打开日志文件详细信息如下(具体位置在C:\WINDOWS

python之上下文管理器

关于计算器运行的上下文的概念,我的理解也不是很深:按我的理解就是程序在运行之前,其所需要的资源,运行环境等都会被序列化,然后加入到CPU的任务队列中,等待调度系统分配时间片执行.下面谈谈python上下文管理器的使用. 自定义上下文管理器 python中最常用的上下文管理器就是文件的打开和关闭了. with open(filename,'r') as file: file.read() 原理 python上下文使用with触发,内部实现了__enter__和__exit__两个魔法方法. cla

Django:之Sitemap站点地图、通用视图和上下文渲染器

Django中自带了sitemap框架,用来生成xml文件 Django sitemap演示: sitemap很重要,可以用来通知搜索引擎页面的地址,页面的重要性,帮助站点得到比较好的收录. 开启sitemap功能的步骤 settings.py文件中django.contrib.sitemaps和django.contrib.sites要在INSTALL_APPS中 INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth',

流畅的python第十五章上下文管理器和else块学习记录

with 语句和上下文管理器for.while 和 try 语句的 else 子句 with 语句会设置一个临时的上下文,交给上下文管理器对象控制,并且负责清理上下文.这么做能避免错误并减少样板代码,因此 API 更安全,而且更易于使用.除了自动关闭文件之外,with 块还有很多用途 else 子句不仅能在 if 语句中使用,还能在 for.while 和 try 语句中使用 for 仅当 for 循环运行完毕时(即 for 循环没有被 break 语句中止)才运行 else 块.while 仅

python上下文管理器ContextLib及with语句

http://blog.csdn.net/pipisorry/article/details/50444736 with语句 with语句是从 Python 2.5 开始引入的一种与异常处理相关的功能(2.5 版本中要通过 from __future__ import with_statement 导入后才可以使用),从 2.6 版本开始缺省可用(参考 What's new in Python 2.6? 中 with 语句相关部分介绍).with 语句适用于对资源进行访问的场合,确保不管使用过程

Python:contextlib模块——上下文管理器工具

上篇博文简单的讲了下with语句的用法以及上下文管理器对象的概念,想必对上下文管理器对象有一定的了解.一个对象如果实现了上下文管理协议,也就是在类中定义了__enter__()和__exit__()方法两个方法的对象,都可以称为上下文管理器对象. 但是,Python中有个contextlib模块,是个比with优美的东西,提供上下文机制的,它是通过Generator装饰器实现的,不再是采用__enter__和__exit__. contextlib模块对外有三个接口,分别是contextlib.

CentOS程序包管理器rpm、yum以及程序包编译安装详解

一.程序包管理器RPM和Yum简介 程序包管理器:将编译好的应用程序的各组成文件打包成一个或几个程序包文件,可以更方便地实现程序包的安装.升级.卸载和查询等管理操作. rpm软件包管理器(RPM Package Manager):rpm包存在依赖关系,依赖关系复杂,安装时间很长,虽然可以忽略依赖关系,但是可能会导致程序包安装后无法正常使用. yum程序包管理器( Yellow dog Updater, Modified):yum是基于RPM包管理,自动解决程序包间的依赖关系.根据配置文件的资源地