Python open() flags for open or create

file, mode, python-3.x

Solution

This is a massive deficiency in C & Python. There's no way to do this via `open()`!!

Python's `open()` is like the `fopen()` API in C, and neither has this ability.

Note that the `try`/`except` approach you posted has a race condition: The file can be created in between the two calls, and suddenly you'll truncate it with the second call.

However: you can achieve what you want using `os.open()` and `os.fdopen()`:

fd = os.open(path, os.O_CREAT | os.O_RDWR | os.O_BINARY)
if fd != -1:
    f = os.fdopen(fd, 'r+b')  # Now use 'f' normally; it'll close `fd` itself

Problem

What is the mode for open(..., mode) in Python 3 that opens a file that - create if does not exist - do NOT truncate - binary mode I tested `r+b` but that fails on missing file, `w+b` truncates it, and `a+b` seem to turn all writes into appends, while I need to overwrite some data.

Original source