Behaviour of truncate() method in Python

You’re right to be suspicious.

First, file.truncate does this:

Truncate the file’s size. If the optional size argument is present, the file is truncated to (at most) that size. The size defaults to the current position…

Not quite the same as Zed’s description—it only “empties the file” if the current position is the start of the file—but since we just opened the file (and not in a mode), the current position is the start, so that isn’t relevant. We’re truncating to an empty file.

Which is all well and good, except that open already does that:

The most commonly-used values of mode are 'r' for reading, 'w' for writing (truncating the file if it already exists) …

So, we open the file, creating it if it doesn’t exist and truncating it to 0 bytes if it does. Then, on the next line, we truncate it to 0 bytes.

(That “Truncating the file. Goodbye!” message is pretty misleading, since we’ve already truncated it. Imagine you put a breakpoint on that line and decided to kill the program before executing it…)

But notice that this isn’t some silly mistake by Zed; he appears to have done this specifically to make the point in study drill #5:

If you open the file with 'w' mode, then do you really need the target.truncate()? Read the documentation for Python’s open function and see if that’s true.

Leave a Comment