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中字符串格式化str.format的详细介绍
Feb 17 Python
Python数据结构与算法之完全树与最小堆实例
Dec 13 Python
python爬取足球直播吧五大联赛积分榜
Jun 13 Python
Python中的CSV文件使用"with"语句的方式详解
Oct 16 Python
django celery redis使用具体实践
Apr 08 Python
python实现串口自动触发工作的示例
Jul 02 Python
anaconda如何查看并管理python环境
Jul 05 Python
基于Python实现人脸自动戴口罩系统
Feb 06 Python
Python如何使用turtle库绘制图形
Feb 26 Python
三步解决python PermissionError: [WinError 5]拒绝访问的情况
Apr 22 Python
python statsmodel的使用
Dec 21 Python
浅谈Python 中的复数问题
May 19 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 文章调用类代码
2011/08/11 PHP
PHP循环遍历数组的3种方法list()、each()和while总结
2014/11/19 PHP
php自定义加密与解密程序实例
2014/12/31 PHP
学习php设计模式 php实现命令模式(command)
2015/12/08 PHP
PHP的几个常用加密函数
2016/02/03 PHP
laravel-admin 管理平台获取当前登陆用户信息的例子
2019/10/08 PHP
PHP dirname功能及原理实例解析
2020/10/28 PHP
javascript中自定义对象的属性方法分享
2013/07/12 Javascript
javascript验证身份证完全方法具体实现
2013/11/18 Javascript
js截取中英文字符串、标点符号无乱码示例解读
2014/04/17 Javascript
Jquery效果大全之制作电脑健康体检得分特效附源码下载
2015/11/02 Javascript
jQuery实现图片上传和裁剪插件Croppie
2015/11/29 Javascript
让编辑器支持word复制黏贴、截屏的js代码
2016/10/17 Javascript
canvas绘制的直线动画
2017/01/23 Javascript
关于meta viewport中target-densitydpi属性详解(推荐)
2017/08/18 Javascript
javascript流程控制语句集合
2017/09/18 Javascript
浅谈FastClick 填坑及源码解析
2018/03/02 Javascript
解决layer图标icon不加载的问题
2019/09/04 Javascript
ES6如何用一句代码实现函数的柯里化
2020/01/18 Javascript
vue router-link 默认a标签去除下划线的实现
2020/11/06 Javascript
JavaScript实现点击切换功能
2021/01/27 Javascript
OpenCV实现人脸识别
2017/04/07 Python
Python 操作MySQL详解及实例
2017/04/30 Python
Python使用sort和class实现的多级排序功能示例
2018/08/15 Python
对numpy中向量式三目运算符详解
2018/10/31 Python
python f-string式格式化听语音流程讲解
2019/06/18 Python
Pytorch转keras的有效方法,以FlowNet为例讲解
2020/05/26 Python
CSS3制作漂亮的照片墙的实现代码
2016/06/08 HTML / CSS
三只松鼠官方旗舰店:全网坚果销售第1
2017/11/25 全球购物
台湾最大网路书店:博客来
2018/03/18 全球购物
农业资源与环境专业自荐信范文
2013/12/30 职场文书
葬礼司仪主持词
2014/03/31 职场文书
县委班子四风对照检查材料思想汇报
2014/09/29 职场文书
工作失职检讨书(精华篇)
2014/10/15 职场文书
看上去很美观后感
2015/06/10 职场文书
win server2012 r2服务器共享文件夹如何设置
2022/06/21 Servers