python with statement 進(jìn)行文件操作指南
由于之前有一個(gè)項(xiàng)目老是要打開(kāi)文件,然后用pickle.load(file),再處理。。。最后要關(guān)閉文件,所以覺(jué)得有點(diǎn)繁瑣,代碼也不簡(jiǎn)潔。所以向python with statement尋求解決方法。
在網(wǎng)上看到一篇文章:http://effbot.org/zone/python-with-statement.htm是介紹with 的,參考著例子進(jìn)行了理解。
如果經(jīng)常有這么一些代碼段的話(huà),可以用一下幾種方法改進(jìn):
代碼段:
set thing up try: do something except : handle exception finally: tear thing down
案例1:
假如現(xiàn)在要實(shí)現(xiàn)這么一個(gè)功能,就是打開(kāi)文件,從文件里面讀取數(shù)據(jù),然后打印到終端,之后關(guān)閉文件。
那么從邏輯上來(lái)說(shuō),可以抽取“打印到終端”為數(shù)據(jù)處理部分,應(yīng)該可以獨(dú)立開(kāi)來(lái)作為一個(gè)函數(shù)。其他像打開(kāi)、關(guān)閉文件應(yīng)該是一起的。
文件名為:for_test.txt
方法1:
用函數(shù),把公共的部分抽取出來(lái)。
#!/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。通過(guò)for - in 來(lái)循環(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:
用類(lèi)的方式加上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)。不過(guò)沒(méi)有exception handle 的功能。
def test4():
with open(filename, 'r') as f:
output(f.read())
print f.read()
最后一句print是用來(lái)測(cè)試f是否已經(jīng)被關(guān)閉了。
最后總結(jié)一下,寫(xiě)這篇文章的目的主要是受了一句話(huà)的刺激:“使用語(yǔ)言的好特性,不要使用那些糟糕的特性”!python真是有很多很優(yōu)雅的好特性,路漫漫其修遠(yuǎn)兮,吾將上下而求索。。。
- 簡(jiǎn)單文件操作python 修改文件指定行的方法
- Python 文件操作技巧(File operation) 實(shí)例代碼分析
- Python文件操作,open讀寫(xiě)文件,追加文本內(nèi)容實(shí)例
- Python 文件操作實(shí)現(xiàn)代碼
- Python復(fù)制文件操作實(shí)例詳解
- Python常見(jiàn)文件操作的函數(shù)示例代碼
- Python實(shí)現(xiàn)的讀取/更改/寫(xiě)入xml文件操作示例
- Python中shutil模塊的常用文件操作函數(shù)用法示例
- python讀寫(xiě)文件操作示例程序
- 使用Python進(jìn)行穩(wěn)定可靠的文件操作詳解
- 詳解Python中的文件操作
- 使用Python對(duì)Csv文件操作實(shí)例代碼
- python 文件操作刪除某行的實(shí)例
- Python讀取properties配置文件操作示例
- python解析xml文件操作實(shí)例
- Python 文件操作的詳解及實(shí)例
- Python文件操作類(lèi)操作實(shí)例詳解
- Python文件操作方法詳解
相關(guān)文章
python判斷文件夾內(nèi)是否存在指定后綴文件的實(shí)例
今天小編就為大家分享一篇python判斷文件夾內(nèi)是否存在指定后綴文件的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06
利用Python判斷文件的幾種方法及其優(yōu)劣對(duì)比
任何的編程語(yǔ)言都離不開(kāi)文件操作,文件操作主要是幫助我們更好的創(chuàng)建打開(kāi)文件,讀取文件中的內(nèi)容、或是把我們想要保存的內(nèi)容寫(xiě)入文件中、或是管理文件目錄等等,下面這篇文章主要給大家介紹了關(guān)于利用Python判斷文件的幾種方法及其優(yōu)劣對(duì)比的相關(guān)資料,需要的朋友可以參考下2022-06-06
如何利用Python實(shí)現(xiàn)給Excel表格截圖
這篇文章主要為大家詳細(xì)介紹了如何利用Python實(shí)現(xiàn)給Excel表格截圖功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-02-02
Python學(xué)習(xí)之圖片濾鏡效果的實(shí)現(xiàn)
濾鏡效果是圖像處理中常用的一種技術(shù),可以用來(lái)增強(qiáng)圖像的視覺(jué)效果,實(shí)現(xiàn)不同的效果,本文就來(lái)利用Python中的Image模塊實(shí)現(xiàn)常見(jiàn)的幾個(gè)圖片濾鏡吧2023-05-05
Qt實(shí)現(xiàn)炫酷啟動(dòng)圖動(dòng)態(tài)進(jìn)度條效果
最近接到一個(gè)新需求,讓做一個(gè)動(dòng)效進(jìn)度條。剛接手這個(gè)項(xiàng)目真的不知所措,后來(lái)慢慢理清思路,問(wèn)題迎刃而解,下面小編通過(guò)本文給大家?guī)?lái)了Qt實(shí)現(xiàn)炫酷啟動(dòng)圖動(dòng)態(tài)進(jìn)度條效果,感興趣的朋友一起看看吧2021-11-11
Python編程中歸并排序算法的實(shí)現(xiàn)步驟詳解
這篇文章主要介紹了Python編程中歸并排序算法的實(shí)現(xiàn)步驟詳解,歸并排序的平均時(shí)間復(fù)雜度為(n\log n),需要的朋友可以參考下2016-05-05
Python實(shí)現(xiàn)刪除list列表重復(fù)元素的方法總結(jié)
在Python編程中,我們經(jīng)常需要處理列表中的重復(fù)元素,這篇文章為大家介紹了五種高效的方法來(lái)刪除列表中的重復(fù)元素,希望對(duì)大家有所幫助2023-07-07
pycharm中選中一個(gè)單詞替換所有重復(fù)單詞的實(shí)現(xiàn)方法
這篇文章主要介紹了pycharm中選中一個(gè)單詞替換所有重復(fù)單詞的實(shí)現(xiàn)方法,類(lèi)似于sublime 里的ctrl+D功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2020-11-11
分享4個(gè)方便且好用的Python自動(dòng)化腳本
自動(dòng)化測(cè)試是把以人為驅(qū)動(dòng)的測(cè)試行為轉(zhuǎn)化為機(jī)器執(zhí)行的一種過(guò)程,直白的就是為了節(jié)省人力、時(shí)間或硬件資源,提高測(cè)試效率,這篇文章主要給大家分享介紹了3個(gè)方便且好用的Python自動(dòng)化腳本,需要的朋友可以參考下2022-02-02

