對Python中的CSV檔案使用“with”語句
是否可以直接使用with語句與CSV檔案?能夠做這樣的事情似乎很自然:
import csv with csv.reader(open("myfile.csv")) as reader: # do things with reader
但是csv.reader不提供__enter__和__exit__方法,所以這不行.但是我可以分兩步做:
import csv with open("myfile.csv") as f: reader = csv.reader(f) # do things with reader
這是第二種方式嗎?為什麼他們不會使csv.reader與with語句直接相容?
with語句的主要用法是對語句中使用的物件進行異常安全的清除.確保檔案已關閉,鎖定已釋放,上下文恢復等.
ofollow,noindex" target="_blank">Python .org/library/csv.html#csv.reader” rel=”noreferrer”>csv.reader是否有異常清理的東西?
我會一起去:
with open("myfile.csv") as f: for row in csv.reader(f): # process row
您不需要將修補程式提交到一起使用csv.reader和語句.
import contextlib
模組contextlib 中功能上下文管理器的幫助:
contextmanager(func) @contextmanager decorator.
典型用法:
@contextmanager def some_generator(<arguments>): <setup> try: yield <value> finally: <cleanup>
這使得:
with some_generator(<arguments>) as <variable>: <body>
相當於:
<setup> try: <variable> = <value> <body> finally: <cleanup>
以下是我如何使用它的具體示例:curses_screen .
程式碼日誌版權宣告:
翻譯自:http://stackoverflow.com/questions/441130/using-with-statement-for-csv-files-in-python