On 9/25/20 8:52 AM, Markus Armbruster wrote:

This was my best attempt to open the file read/write, creating it if it
doesn't exist.

Plain

         f = open(pathname, "r+", encoding='utf-8')

fails instead of creates, and

         f = open(pathname, "w+", encoding='utf-8')

truncates.

If you know a better way, tell me!

IIUC, you need  "a+" as the mode, rather than "w+"

Sure this lets me do

             f.seek(0)
             f.truncate(0)
             f.write(text)

to overwrite the old contents on all systems?

As long as you do a single pass over the output (you issue a stream of f.write() after the truncate, but never a seek), then this will work.


Documentation cautions:

     [...] 'a' for appending (which on some Unix systems, means that all
     writes append to the end of the file regardless of the current seek
     position).

Yes, that means that random access is impossible on such a stream. But not all file creation patterns require random access.

--
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3226
Virtualization:  qemu.org | libvirt.org


Reply via email to