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

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()

In earlier versions of Python, you can sometimes use
contextlib.nested() to nest context managers. This wont 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

Most of the time you have a variable set of files, you likely want to open them one after the other, though.

Just replace and with , and youre done:

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

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

For opening many files at once or for long file paths, it may be useful to break things up over multiple lines. From the Python Style Guide as suggested by @Sven Marnach in comments to another answer:

with open(/path/to/InFile.ext, r) as file_1, 
     open(/path/to/OutFile.ext, w) as file_2:
    file_2.write(file_1.read())

Leave a Reply

Your email address will not be published. Required fields are marked *