Hva er den nøyaktige forskjellen mellom modusene w
, a
, w+
, a+
og r+
i den innebygde python-funksjonen open?
Dokumentasjonen antyder at alle disse tillater skriving til filen, og sier at den åpner filene for "appending", "writing" og "updating" spesifikt, men definerer ikke hva disse begrepene betyr.
Åpningsmodusene er nøyaktig de samme som for C-standardbiblioteksfunksjonen fopen()
.
BSD fopen
manpage definerer dem som følger:
The argument mode points to a string beginning with one of the following
sequences (Additional characters may follow these sequences.):
``r'' Open text file for reading. The stream is positioned at the
beginning of the file.
``r+'' Open for reading and writing. The stream is positioned at the
beginning of the file.
``w'' Truncate file to zero length or create text file for writing.
The stream is positioned at the beginning of the file.
``w+'' Open for reading and writing. The file is created if it does not
exist, otherwise it is truncated. The stream is positioned at
the beginning of the file.
``a'' Open for writing. The file is created if it does not exist. The
stream is positioned at the end of the file. Subsequent writes
to the file will always end up at the then current end of file,
irrespective of any intervening fseek(3) or similar.
``a+'' Open for reading and writing. The file is created if it does not
exist. The stream is positioned at the end of the file. Subse-
quent writes to the file will always end up at the then current
end of file, irrespective of any intervening fseek(3) or similar.
Alternativene er de samme som for fopen-funksjonen i C-standardbiblioteket:
w
avkorter filen, og overskriver det som allerede var i den
a
føyer til filen, og legger til det som allerede var der
w+
åpner for lesing og skriving, avkorter filen, men lar deg også lese tilbake det som er skrevet til filen.
a+
åpner for å legge til og lese, slik at du både kan legge til i filen og lese innholdet.
Jeg kom over dette da jeg prøvde å finne ut hvorfor man bruker modus 'w+' kontra 'w'. Til slutt gjorde jeg bare noen tester. Jeg kan ikke se noen hensikt med mode 'w+', siden filen i begge tilfeller er avkortet til å begynne med. Med 'w+' kan du imidlertid lese etter skriving ved å søke tilbake. Hvis du forsøkte å lese med 'w', ville det oppstå en IOError. Lesing uten å bruke seek med modus 'w+' vil ikke gi noe som helst, siden filpekeren vil være etter der du har skrevet.