香港云主机最佳企业级服务商!

ADSL拨号VPS包含了中国大陆(联通,移动,电信,)

中国香港,国外拨号VPS。

当前位置:云主机 > python >

电信ADSL拨号VPS
联通ADSL拨号VPS
移动ADSL拨号VPS

python with statement 进行文件操作指南


时间:2021-04-29 10:48 作者:admin610456


由于之前有一个项目老是要打开文件,然后用pickle.load(file),再处理。。。最后要关闭文件,所以觉得有点繁琐,代码也不简洁。所以向python/' target='_blank'>python with statement寻求解决方法。

在网上看到一篇文章:http://effbot.org/zone/Python-with-statement.htm是介绍with 的,参考着例子进行了理解。

如果经常有这么一些代码段的话,可以用一下几种方法改进:

代码段:

set thing uptry:  do somethingexcept :  handle exceptionfinally:  tear thing down

案例1:

假如现在要实现这么一个功能,就是打开文件,从文件里面读取数据,然后打印到终端,之后关闭文件。

那么从逻辑上来说,可以抽取“打印到终端”为数据处理部分,应该可以独立开来作为一个函数。其他像打开、关闭文件应该是一起的。

文件名为:for_test.txt

方法1:

用函数,把公共的部分抽取出来。

#!/usr/bin/env python from __future__ import with_statement  filename = 'for_test.txt' def output(content):   print content #functio solution def controlled_execution(func):   #prepare thing   f = None   try:     #set thing up     f = open(filename, 'r')     content = f.read()     if not callable(func):       return     #deal with thing      func(content)   except IOError, e:     print 'Error %s' % str(e)   finally:     if f:        #tear thing down       f.close() def test():   controlled_execution(output) test() 


方法2:

用yield实现一个只产生一项的generator。通过for - in 来循环。

代码片段如下:

#yield solution def controlled_execution():   f = None   try:     f = open(filename, 'r')     thing = f.read()     #for thing in f:     yield thing   except IOError,e:     print 'Error %s' % str(e)   finally:     if f:        f.close() def test2():   for content in controlled_execution():     output(content) 

方法3:

用类的方式加上with实现。

代码片段如下:

#class solution class controlled_execution(object):   def __init__(self):     self.f = None   def __enter__(self):     try:       f = open(filename, 'r')       content = f.read()       return content     except IOError ,e:       print 'Error %s' % str(e)       #return None   def __exit__(self, type, value, traceback):     if self.f:       print 'type:%s, value:%s, traceback:%s' % \           (str(type), str(value), str(traceback))       self.f.close() def test3():   with controlled_execution() as thing:     if thing:       output(thing)  

方法4:

用with实现。不过没有exception handle 的功能。

def test4():   with open(filename, 'r') as f:     output(f.read())    print f.read() 

最后一句print是用来测试f是否已经被关闭了。

最后总结一下,写这篇文章的目的主要是受了一句话的刺激:“使用语言的好特性,不要使用那些糟糕的特性”!python真是有很多很优雅的好特性,路漫漫其修远兮,吾将上下而求索。。。

(责任编辑:admin)






帮助中心
会员注册
找回密码
新闻中心
快捷通道
域名登录面板
虚机登录面板
云主机登录面板
关于我们
关于我们
联系我们
联系方式

售前咨询:17830004266(重庆移动)

企业QQ:383546523

《中华人民共和国工业和信息化部》 编号:ICP备00012341号

Copyright © 2002 -2018 香港云主机 版权所有
声明:香港云主机品牌标志、品牌吉祥物均已注册商标,版权所有,窃用必究

云官方微信

在线客服

  • 企业QQ: 点击这里给我发消息
  • 技术支持:383546523

  • 公司总台电话:17830004266(重庆移动)
  • 售前咨询热线:17830004266(重庆移动)