Voglio:Come aprire (leggere-scrivere) o creare un file con troncamento consentito?
- aprire un file in modalità lettura-scrittura se esiste;
- crealo se non esiste;
- essere in grado di troncarlo sempre e ovunque.
EDIT: con troncare intendo scrivere fino posizione e scartare la parte rimanente del file, se presente
Tutto questo atomicamente (con un singolo open()
chiamata o simulare un singolo open()
chiamata)
Nessuna singola modalità aperta sembra applicarsi:
- r: ovviamente non funziona;
- r +: fallisce se il file non esiste;
- w: ricrea il file se esiste;
- w +: ricrea il file se esiste;
- a: non può leggere;
- a +: non può troncare.
Alcune combinazioni che ho provato (rw, rw +, r + w, ecc.) Sembra non funzionare neanche. È possibile?
Alcuni doc da Ruby (vale anche per python troppo):
r
Read-only mode. The file pointer is placed at the beginning of the file.
This is the default mode.
r+
Read-write mode. The file pointer will be at the beginning of the file.
w
Write-only mode. Overwrites the file if the file exists. If the file
does not exist, creates a new file for writing.
w+
Read-write mode. Overwrites the existing file if the file exists. If the
file does not exist, creates a new file for reading and writing.
a
Write-only mode. The file pointer is at the end of the file if the file
exists. That is, the file is in the append mode. If the file does not exist,
it creates a new file for writing.
a+
Read and write mode. The file pointer is at the end of the file if the file
exists. The file opens in the append mode. If the file does not exist, it
creates a new file for reading and writing.
Quindi in sostanza desidera sovrascrivere un file e assicurarsi che i contenuti precedenti non rimangano al di sotto del punto in cui hai smesso di scrivere? –
Sì. 'file.truncate()' funziona per questo scopo e funziona quando il file è "r +", "w", "w +". Ma hanno tutti i difetti che ho elencato sopra. – ceztko