How can I open multiple files using “with open” in Python?

As of Python 2.7 (or 3.1 respectively) you can write

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

(Historical note: In earlier versions of Python, you can sometimes use
contextlib.nested() to nest context managers. This won’t work as expected for opening multiples files, though — see the linked documentation for details.)


In the rare case that you want to open a variable number of files all at the same time, you can use contextlib.ExitStack, starting from Python version 3.3:

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

Note that more commonly you want to process files sequentially rather than opening all of them at the same time, in particular if you have a variable number of files:

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

Leave a Comment