欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python with statement 進(jìn)行文件操作指南

 更新時(shí)間:2014年08月22日 09:40:36   投稿:hebedich  
在Python中,with關(guān)鍵字是一個(gè)替你管理實(shí)現(xiàn)上下文協(xié)議對(duì)象的好東西。例如:file等。在file的結(jié)束,會(huì)自動(dòng)關(guān)閉該文件句柄。而這正是本文所需要的

由于之前有一個(gè)項(xiàng)目老是要打開文件,然后用pickle.load(file),再處理。。。最后要關(guān)閉文件,所以覺得有點(diǎn)繁瑣,代碼也不簡(jiǎn)潔。所以向python with statement尋求解決方法。

在網(wǎng)上看到一篇文章:http://effbot.org/zone/python-with-statement.htm是介紹with 的,參考著例子進(jìn)行了理解。

如果經(jīng)常有這么一些代碼段的話,可以用一下幾種方法改進(jìn):

代碼段:

set thing up
try:
  do something
except :
  handle exception
finally:
  tear thing down

案例1:

假如現(xiàn)在要實(shí)現(xiàn)這么一個(gè)功能,就是打開文件,從文件里面讀取數(shù)據(jù),然后打印到終端,之后關(guān)閉文件。

那么從邏輯上來說,可以抽取“打印到終端”為數(shù)據(jù)處理部分,應(yīng)該可以獨(dú)立開來作為一個(gè)函數(shù)。其他像打開、關(guān)閉文件應(yīng)該是一起的。

文件名為:for_test.txt

方法1:

用函數(shù),把公共的部分抽取出來。
 

#!/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實(shí)現(xiàn)一個(gè)只產(chǎn)生一項(xiàng)的generator。通過for - in 來循環(huán)。

代碼片段如下:

#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實(shí)現(xiàn)。

代碼片段如下:
 

#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實(shí)現(xiàn)。不過沒有exception handle 的功能。

def test4(): 
  with open(filename, 'r') as f: 
    output(f.read()) 
 
  print f.read() 

 最后一句print是用來測(cè)試f是否已經(jīng)被關(guān)閉了。

    最后總結(jié)一下,寫這篇文章的目的主要是受了一句話的刺激:“使用語言的好特性,不要使用那些糟糕的特性”!python真是有很多很優(yōu)雅的好特性,路漫漫其修遠(yuǎn)兮,吾將上下而求索。。。

相關(guān)文章

  • Python?OpenCV識(shí)別行人入口進(jìn)出人數(shù)統(tǒng)計(jì)

    Python?OpenCV識(shí)別行人入口進(jìn)出人數(shù)統(tǒng)計(jì)

    本文主要介紹了Python?OpenCV識(shí)別行人入口進(jìn)出人數(shù)統(tǒng)計(jì),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧<BR>
    2023-01-01
  • Python使用urllib2模塊抓取HTML頁面資源的實(shí)例分享

    Python使用urllib2模塊抓取HTML頁面資源的實(shí)例分享

    這篇文章主要介紹了Python使用urllib2模塊抓取HTML頁面資源的實(shí)例分享,將要抓取的頁面地址寫在單獨(dú)的規(guī)則列表中方便組織和重復(fù)使用,需要的朋友可以參考下
    2016-05-05
  • 解決pycharm remote deployment 配置的問題

    解決pycharm remote deployment 配置的問題

    今天小編就為大家分享一篇解決pycharm remote deployment 配置的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • Python圖像識(shí)別+KNN求解數(shù)獨(dú)的實(shí)現(xiàn)

    Python圖像識(shí)別+KNN求解數(shù)獨(dú)的實(shí)現(xiàn)

    這篇文章主要介紹了Python圖像識(shí)別+KNN求解數(shù)獨(dú)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • python實(shí)現(xiàn)發(fā)送QQ郵件(可加附件)

    python實(shí)現(xiàn)發(fā)送QQ郵件(可加附件)

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)發(fā)送QQ郵件,可添加附件功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • python如何實(shí)現(xiàn)斐波那契數(shù)列

    python如何實(shí)現(xiàn)斐波那契數(shù)列

    這篇文章主要介紹了python如何實(shí)現(xiàn)斐波那契數(shù)列問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Python中使用socks5設(shè)置全局代理的方法示例

    Python中使用socks5設(shè)置全局代理的方法示例

    這篇文章主要介紹了Python中使用socks5設(shè)置全局代理的方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • python基礎(chǔ)梳理(一)(推薦)

    python基礎(chǔ)梳理(一)(推薦)

    這篇文章主要介紹了python基礎(chǔ)梳理,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 利用Python編寫一個(gè)簡(jiǎn)單的緩存系統(tǒng)

    利用Python編寫一個(gè)簡(jiǎn)單的緩存系統(tǒng)

    今天來做一個(gè)最簡(jiǎn)單的例子,利用寫一個(gè)最簡(jiǎn)單的緩存系統(tǒng),以key``value的方式保持?jǐn)?shù)據(jù),并且需要將內(nèi)容中的數(shù)據(jù)落地到文件,以便下次啟動(dòng)的時(shí)候,將文件的內(nèi)容加載進(jìn)內(nèi)存中來,感興趣的可以了解一下
    2023-04-04
  • Python調(diào)用jar包方法實(shí)現(xiàn)過程解析

    Python調(diào)用jar包方法實(shí)現(xiàn)過程解析

    這篇文章主要介紹了Python調(diào)用jar包方法實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08

最新評(píng)論