欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

python with statement 進行文件操作指南

系統 1611 0

由于之前有一個項目老是要打開文件,然后用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真是有很多很優雅的好特性,路漫漫其修遠兮,吾將上下而求索。。。


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲综合精品香蕉久久网97 | 亚洲天堂免费在线 | 国产精品小黄鸭一区二区三区 | 日本无码成人片在线观看波多 | 韩国资源视频一区二区三区 | 国产综合精品久久亚洲 | 成年男女免费视频 | 国产成人啪精品视频免费网站软件 | 国产xxx在线观看 | 男人的午夜影院 | 九九操视频 | 精品欧美乱码久久久久久 | 亚洲一区二区久久 | 少妇的肉体的满足毛片 | 中文字字幕在线 | 久久精品天堂 | 精品国产成人在线 | 狠狠插综合 | 精品视频 | 国产成人19禁在线观看 | 狼伊千合综网中文 | 国产精品福利片免费看 | 日韩一区二区在线视频 | 国产拳头交一区二区 | 亚洲精品免费在线视频 | 天天色综合天天 | 成人免费网站视频 | 日韩精品一区二区在线观看 | 国产福利资源在线 | 奇米影视欧美 | 天天影视综合网色综合国产 | 天天操天天干天天操 | 五月天激激婷婷大综合丁香 | 成人情趣视频 | 久精品视频| 天天干网 | 精品一久久 | 午夜视频在线观看网站 | 国产91在线观看 | 国产一级免费在线观看 | 亚洲综合天堂网 |