Python で「with open」を使用して複数のファイルを開くにはどうすればよいですか? 質問する

Python で「with open」を使用して複数のファイルを開くにはどうすればよいですか? 質問する

一度にいくつかのファイルを変更したいのです、それらすべてに書き込むことができればよいのですが。複数のオープン呼び出しを次のwithステートメントと組み合わせることができるかどうか疑問に思っています。

try:
  with open('a', 'w') as a and open('b', 'w') as b:
    do_something()
except IOError as e:
  print 'Operation failed: %s' % e.strerror

それが不可能な場合、この問題に対するエレガントな解決策はどのようなものになるでしょうか?

ベストアンサー1

Python 2.7(または3.1)以降では、次のように記述できます。

with open('a', 'w') as a, open('b', 'w') as b:
    do_something()

歴史的注記:Pythonの以前のバージョンでは、contextlib.nested()コンテキスト マネージャーをネストします。ただし、複数のファイルを開く場合は期待どおりに動作しません。詳細については、リンクされたドキュメントを参照してください。


まれに、複数のファイルを同時に開きたい場合には、contextlib.ExitStackPython バージョン 3.3 以降:

with ExitStack() as stack:
    files = [stack.enter_context(open(fname)) for fname in filenames]
    # Do something with "files"

特にファイルの数が可変である場合は、すべてのファイルを同時に開くのではなく、順番に処理する方が一般的であることに注意してください。

for fname in filenames:
    with open(fname) as f:
        # Process f

おすすめ記事