python with statement 進(jì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)兮,吾將上下而求索。。。
- 簡(jiǎn)單文件操作python 修改文件指定行的方法
- Python 文件操作技巧(File operation) 實(shí)例代碼分析
- Python文件操作,open讀寫文件,追加文本內(nèi)容實(shí)例
- Python 文件操作實(shí)現(xiàn)代碼
- Python復(fù)制文件操作實(shí)例詳解
- Python常見文件操作的函數(shù)示例代碼
- Python實(shí)現(xiàn)的讀取/更改/寫入xml文件操作示例
- Python中shutil模塊的常用文件操作函數(shù)用法示例
- python讀寫文件操作示例程序
- 使用Python進(jìn)行穩(wěn)定可靠的文件操作詳解
- 詳解Python中的文件操作
- 使用Python對(duì)Csv文件操作實(shí)例代碼
- python 文件操作刪除某行的實(shí)例
- Python讀取properties配置文件操作示例
- python解析xml文件操作實(shí)例
- Python 文件操作的詳解及實(shí)例
- Python文件操作類操作實(shí)例詳解
- Python文件操作方法詳解
相關(guān)文章
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-01Python使用urllib2模塊抓取HTML頁面資源的實(shí)例分享
這篇文章主要介紹了Python使用urllib2模塊抓取HTML頁面資源的實(shí)例分享,將要抓取的頁面地址寫在單獨(dú)的規(guī)則列表中方便組織和重復(fù)使用,需要的朋友可以參考下2016-05-05解決pycharm remote deployment 配置的問題
今天小編就為大家分享一篇解決pycharm remote deployment 配置的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-06-06Python圖像識(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-11python實(shí)現(xiàn)發(fā)送QQ郵件(可加附件)
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)發(fā)送QQ郵件,可添加附件功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-12-12python如何實(shí)現(xiàn)斐波那契數(shù)列
這篇文章主要介紹了python如何實(shí)現(xiàn)斐波那契數(shù)列問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08Python中使用socks5設(shè)置全局代理的方法示例
這篇文章主要介紹了Python中使用socks5設(shè)置全局代理的方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04利用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-04Python調(diào)用jar包方法實(shí)現(xiàn)過程解析
這篇文章主要介紹了Python調(diào)用jar包方法實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08