一度にいくつかのファイルを変更したいのですが、それらすべてに書き込むことができればよいのですが。複数のオープン呼び出しを次の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.ExitStack
Python バージョン 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