python with statement 进行文件操作指南


Posted in Python onAugust 22, 2014

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

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

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

代码段:

set thing up
try:
  do something
except :
  handle exception
finally:
  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真是有很多很优雅的好特性,路漫漫其修远兮,吾将上下而求索。。。

Python 相关文章推荐
python聊天程序实例代码分享
Nov 18 Python
Python实现的检测web服务器健康状况的小程序
Sep 17 Python
Python网络编程中urllib2模块的用法总结
Jul 12 Python
深入浅出学习python装饰器
Sep 29 Python
Python中.join()和os.path.join()两个函数的用法详解
Jun 11 Python
python绘制圆柱体的方法
Jul 02 Python
Python函数装饰器常见使用方法实例详解
Mar 30 Python
Flask框架学习笔记之使用Flask实现表单开发详解
Aug 12 Python
python框架flask表单实现详解
Nov 04 Python
IDLE下Python文件编辑和运行操作
Apr 25 Python
Python实现读取并写入Excel文件过程解析
May 27 Python
秀!学妹看见都惊呆的Python小招数!【详细语言特性使用技巧】
Apr 27 Python
Python中还原JavaScript的escape函数编码后字符串的方法
Aug 22 #Python
python错误:AttributeError: 'module' object has no attribute 'setdefaultencoding'问题的解决方法
Aug 22 #Python
Python升级提示Tkinter模块找不到的解决方法
Aug 22 #Python
Python实现多行注释的另类方法
Aug 22 #Python
Python利用pyHook实现监听用户鼠标与键盘事件
Aug 21 #Python
Python发送Email方法实例
Aug 21 #Python
Python生成验证码实例
Aug 21 #Python
You might like
桌面中心(三)修改数据库
2006/10/09 PHP
php输出echo、print、print_r、printf、sprintf、var_dump的区别比较
2013/06/21 PHP
php更新修改excel中的内容实例代码
2014/02/26 PHP
Web开发者必备的12款超赞jQuery插件
2010/12/03 Javascript
100个不能错过的实用JS自定义函数
2014/03/05 Javascript
JS 排序输出实现table行号自增前端动态生成的tr
2014/08/13 Javascript
浏览器缩放检测的js代码
2014/09/28 Javascript
jquery实现全选、反选、获得所有选中的checkbox
2020/09/13 Javascript
javascript 常用验证函数总结
2016/06/28 Javascript
vue2.0实战之使用vue-cli搭建项目(2)
2017/03/27 Javascript
微信小程序 开发之全局配置
2017/05/05 Javascript
angular.js指令中transclude选项及ng-transclude指令详解
2017/05/24 Javascript
es6+angular1.X+webpack 实现按路由功能打包项目的示例
2017/08/16 Javascript
vue cli 3.x 项目部署到 github pages的方法
2019/04/17 Javascript
Python并发编程协程(Coroutine)之Gevent详解
2017/12/27 Python
Python冲顶大会 快来答题!
2018/01/17 Python
python 对dataframe下面的值进行大规模赋值方法
2018/06/09 Python
python随机数分布random测试
2018/08/27 Python
python print输出延时,让其立刻输出的方法
2019/01/07 Python
python 读取dicom文件,生成info.txt和raw文件的方法
2019/01/24 Python
使用pandas 将DataFrame转化成dict
2019/12/10 Python
Python操作注册表详细步骤介绍
2020/02/05 Python
python实现最速下降法
2020/03/24 Python
Rhone官方网站:男士运动服装、健身服装和高级运动服
2019/05/01 全球购物
英国最受信任的在线眼镜商之一:Fashion Eyewear
2019/10/31 全球购物
社会实践自我鉴定
2013/11/07 职场文书
制定岗位职责的原则
2013/11/08 职场文书
副处级干部考察材料
2014/05/17 职场文书
解除劳动合同协议书
2014/09/17 职场文书
车间质检员岗位职责
2015/04/08 职场文书
导游词之黄果树瀑布
2019/09/20 职场文书
励志语录:时光飞逝,请学会珍惜所有的人和事
2020/01/16 职场文书
深入理解以DEBUG方式线程的底层运行原理
2021/06/21 Java/Android
Mysql数据库按时间点恢复实战记录
2021/06/30 MySQL
MySQL高速缓存启动方法及参数详解(query_cache_size)
2021/07/01 MySQL
Windows server 2012 R2 安装IIS服务器
2022/04/29 Servers