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中atexit模块的基本使用示例
Jul 08 Python
Python实现批量将word转html并将html内容发布至网站的方法
Jul 14 Python
在PyCharm导航区中打开多个Project的关闭方法
Jan 17 Python
Python实现连接MySql数据库及增删改查操作详解
Apr 16 Python
Python3.5内置模块之random模块用法实例分析
Apr 26 Python
python实现给微信指定好友定时发送消息
Apr 29 Python
Django 配置多站点多域名的实现步骤
May 17 Python
python射线法判断一个点在图形区域内外
Jun 28 Python
python字典嵌套字典的情况下找到某个key的value详解
Jul 10 Python
Python在cmd上打印彩色文字实现过程详解
Aug 07 Python
python支持多线程的爬虫实例
Dec 21 Python
Python接口测试结果集实现封装比较
May 01 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
PHP初学者头疼问题总结
2006/07/08 PHP
php数组函数序列之array_intersect() 返回两个或多个数组的交集数组
2011/11/10 PHP
php与java通过socket通信的实现代码
2013/10/21 PHP
ThinkPHP删除栏目(实现批量删除栏目)
2017/06/21 PHP
WordPress JQuery处理沙发头像
2009/06/22 Javascript
jquery select(列表)的操作(取值/赋值)
2009/08/06 Javascript
jQuery toggle()设置CSS样式
2009/11/05 Javascript
JavaScript入门之基本函数详解
2011/10/21 Javascript
限制textbox或textarea输入字符长度的JS代码
2013/10/16 Javascript
jquery简单实现鼠标经过导航条改变背景图
2013/12/17 Javascript
js弹出确认是否删除对话框
2014/03/27 Javascript
jquery实现超简洁的TAB选项卡效果代码
2015/08/28 Javascript
基于jQuery实现多层次的手风琴效果附源码
2015/09/21 Javascript
JavaScript中this的四个绑定规则总结
2016/09/26 Javascript
微信小程序 教程之wxapp视图容器 scroll-view
2016/10/19 Javascript
Javascript基于jQuery UI实现选中区域拖拽效果
2016/11/25 Javascript
IScroll那些事_当内容不足时下拉刷新的解决方法
2017/07/18 Javascript
React Native第三方平台分享的实例(Android,IOS双平台)
2017/08/04 Javascript
从零学python系列之浅谈pickle模块封装和拆封数据对象的方法
2014/05/23 Python
Django model反向关联名称的方法
2018/12/15 Python
python调用c++传递数组的实例
2019/02/13 Python
解决python打不开文件(文件不存在)的问题
2019/02/18 Python
python 多进程共享全局变量之Manager()详解
2019/08/15 Python
pytorch神经网络之卷积层与全连接层参数的设置方法
2019/08/18 Python
Python流程控制 if else实现解析
2019/09/02 Python
python调用函数、类和文件操作简单实例总结
2019/11/29 Python
Python带参数的装饰器运行原理解析
2020/06/09 Python
Python爬取微信小程序通用方法代码实例详解
2020/09/29 Python
如何使用Pytorch搭建模型
2020/10/26 Python
斯洛伐克电子产品购物网站:DATART
2020/04/05 全球购物
什么样的创业计划书可行性高?
2014/02/01 职场文书
关于旷工的检讨书
2014/02/02 职场文书
大学生会计职业生涯规划范文
2014/02/28 职场文书
2014年大学生党课心得体会范文
2014/03/29 职场文书
2014年前台文员工作总结
2014/12/08 职场文书
浅谈Python中对象是如何被调用的
2022/04/06 Python