There is no "append mode" for write_text
, nor is there a corresponding append_text
method. If you need it, you can write a function for it yourself pretty easily:
def append_text(path, text, encoding=None, errors=None):
with path.open("a", encoding=encoding, errors=errors) as f:
f.write(text)
You might be wondering why such a thing isn't built directly into pathlib
as a method. One reason is precisely because it is so easy to implement yourself that it's not really worth adding, but clearly that's not the whole story, because read_text
and write_text
would be similarly easy to implement yourself.
I think a major reason why pathlib.Path
objects don't (and, indeed, shouldn't) have a append_text
method is because it creates a hole for inexperienced users to fall into, which is a huge sin in API design.
Specifically, the hole I'm referring to is using append_text
on the same file repeatedly in a loop. Because you're continually opening and closing the file, it is slow. Plus, doing so many unnecessary writes is probably not great for the health of your hard drive.
Worse, because the program will actually behave correctly (e.g. the file will have the contents they intended), they may not even notice anything is wrong, because they don't necessarily have a mental gauge on how long writing to a file "should" take.
This is exactly the sort of code a naïve programmer would write:
from pathlib import Path
N = 100
path = Path("numbers.txt")
path.write_text(f"{N}\n")
for i in range(N):
path.append_text(f"{i}\n")