1. ホーム
  2. python

[解決済み] Pythonで "with open "を使って複数のファイルを開くにはどうしたらいいですか?

2022-02-25 06:41:48

質問

いくつかのファイルを一度に変更したいのですが。 もし 全部に書き込めます。どうにかして複数のオープンコールを組み合わせて 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

それが無理なら、この問題に対するエレガントな解決策はどのようなものでしょうか?

どのように解決するのか?

Python 2.7(または3.1)では、次のように記述することができます。

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

以前のバージョンのPythonでは、たまに contextlib.nested() を使用してコンテキスト・マネージャーをネストすることができます。 しかし、これは複数のファイルを開く場合には期待通りに動作しません -- 詳細はリンク先のドキュメントを参照してください。


まれに、可変数のファイルをすべて同時に開きたい場合は、以下のようにします。 contextlib.ExitStack Python 3.3から導入されました。

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

ほとんどの場合、可変長のファイルセットを持っているので、それらを次々に開きたいのでしょうけど。