CSV ファイルでステートメントを直接使用することは可能ですかwith
? 次のようなことができるのは自然なことのように思えます:
import csv
with csv.reader(open("myfile.csv")) as reader:
# do things with reader
__enter__
しかし、csv.reader はおよびメソッドを提供していない__exit__
ため、これは機能しません。ただし、次の 2 つの手順で実行できます。
import csv
with open("myfile.csv") as f:
reader = csv.reader(f)
# do things with reader
この 2 番目の方法は理想的な方法でしょうか? csv.reader を with ステートメントと直接互換性のあるものにしないのはなぜでしょうか?
ベストアンサー1
ステートメントの主な用途は、with
ステートメントで使用されるオブジェクトの例外セーフなクリーンアップです。with
ファイルが閉じられ、ロックが解放され、コンテキストが復元されることなどを確認します。
しますかcsvリーダー例外が発生した場合にクリーンアップするものはありますか?
私ならこうします:
with open("myfile.csv") as f:
for row in csv.reader(f):
# process row
csv.reader
使用とステートメントを一緒にするためにパッチを送信する必要はありませんwith
。
import contextlib
モジュール内の関数 contextmanager に関するヘルプコンテキストライブラリ:
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>
私がこれをどのように使用したかの具体的な例を以下に示します。呪いスクリーン。