最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

pythonwithstatement进行文件操作指南

来源:动视网 责编:小采 时间:2020-11-27 14:30:54
文档

pythonwithstatement进行文件操作指南

pythonwithstatement进行文件操作指南:由于之前有一个项目老是要打开文件,然后用pickle.load(file),再处理。最后要关闭文件,所以觉得有点繁琐,代码也不简洁。所以向python with statement寻求解决方法。 在网上看到一篇文章:http://effbot.org/zone/python-with
推荐度:
导读pythonwithstatement进行文件操作指南:由于之前有一个项目老是要打开文件,然后用pickle.load(file),再处理。最后要关闭文件,所以觉得有点繁琐,代码也不简洁。所以向python with statement寻求解决方法。 在网上看到一篇文章:http://effbot.org/zone/python-with

由于之前有一个项目老是要打开文件,然后用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真是有很多很优雅的好特性,路漫漫其修远兮,吾将上下而求索。。

文档

pythonwithstatement进行文件操作指南

pythonwithstatement进行文件操作指南:由于之前有一个项目老是要打开文件,然后用pickle.load(file),再处理。最后要关闭文件,所以觉得有点繁琐,代码也不简洁。所以向python with statement寻求解决方法。 在网上看到一篇文章:http://effbot.org/zone/python-with
推荐度:
标签: 文件 操作 File
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top