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 相关文章推荐
Linux环境下MySQL-python安装过程分享
Feb 02 Python
用python制作游戏外挂
Jan 04 Python
python实现微信自动回复功能
Apr 11 Python
Django开发中的日志输出的方法
Jul 02 Python
Python使用pyodbc访问数据库操作方法详解
Jul 05 Python
python采集微信公众号文章
Dec 20 Python
Python给定一个句子倒序输出单词以及字母的方法
Dec 20 Python
python修改FTP服务器上的文件名
Sep 11 Python
Python自带的IDE在哪里
Jul 01 Python
Python Selenium实现无可视化界面过程解析
Aug 25 Python
Python Serial串口基本操作(收发数据)
Nov 06 Python
python 用递归实现通用爬虫解析器
Apr 16 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如何透过ODBC来存取数据库
2006/10/09 PHP
php如何调用webservice应用介绍
2012/11/24 PHP
Yii2增加验证码步骤详解
2016/04/25 PHP
php 浮点数比较方法详解
2017/05/05 PHP
PHP的简单跳转提示的实现详解
2019/03/14 PHP
phpQuery采集网页实现代码实例
2020/04/02 PHP
IE中createElement需要注意的一个问题
2010/07/13 Javascript
js实现带搜索功能的下拉框实时搜索实时匹配
2013/11/05 Javascript
Javascript中的作用域和上下文深入理解
2015/07/03 Javascript
第一次接触JS require.js模块化工具
2016/04/17 Javascript
JS控制静态页面传递参数并获取参数应用
2016/08/10 Javascript
Vuex2.0+Vue2.0构建备忘录应用实践
2016/11/30 Javascript
BootStrap 图片样式、辅助类样式和CSS组件的实例详解
2017/01/20 Javascript
jQuery监听浏览器窗口大小的变化实例
2017/02/07 Javascript
JS中利用localStorage防止页面动态添加数据刷新后数据丢失
2017/03/10 Javascript
微信小程序之多列表的显示和隐藏功能【附源码】
2018/08/06 Javascript
angular中如何绑定iframe中src的方法
2019/02/01 Javascript
react中hook介绍以及使用教程
2020/12/11 Javascript
python动态加载包的方法小结
2016/04/18 Python
Python面向对象类的继承实例详解
2018/06/27 Python
python复制列表时[:]和[::]之间有什么区别
2018/10/16 Python
Python 多维List创建的问题小结
2019/01/18 Python
python实现证件照换底功能
2019/08/20 Python
python命令 -u参数用法解析
2019/10/24 Python
Python插入Elasticsearch操作方法解析
2020/01/19 Python
python selenium操作cookie的实现
2020/03/18 Python
python删除文件、清空目录的实现方法
2020/09/23 Python
CSS3 border-image详解、应用及jQuery插件
2011/08/29 HTML / CSS
css3 position fixed固定居中问题解决方案
2014/08/19 HTML / CSS
Cotton On香港网站:澳洲时装连锁品牌
2018/11/01 全球购物
泰国王权免税店官方网站:KingPower
2019/03/11 全球购物
高中数学教师求职信
2013/10/30 职场文书
证婚人搞笑证婚词
2014/01/10 职场文书
饭店服务员岗位职责
2015/02/09 职场文书
2016年大学生社区服务活动总结
2016/04/06 职场文书
python 实现的截屏工具
2021/05/08 Python