Python で CSV ファイルに「with」ステートメントを使用する 質問する

Python で CSV ファイルに「with」ステートメントを使用する 質問する

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>

私がこれをどのように使用したかの具体的な例を以下に示します。呪いスクリーン

おすすめ記事