Questo è un po 'fuorviante. open()
come la modalità arg accetta qualsiasi carattere, mentre si passa uno valido, ad esempio "w,r,b,+,a"
.
Così è possibile scrivere: open("fname", "w+ANYTHINGYOUWANT")
. Aprirà il file come open("fname", "w+")
. E open("fname", "rANYTHINGYOUWANT")
. aprirà il file come open("fname", "w+")
.
Riguardo flag "U":
Oltre alla fopen standard() valori modalità può essere 'U' o 'ru'. Python è solitamente costruito con supporto universale per le nuove linee; fornendo 'U' apre il file come un file di testo, ma le linee possono essere terminate da uno qualsiasi di come segue: la convenzione di fine riga di Unix '\ n', la convenzione di Macintosh '\ r' o Windows convenzione '\ r \ n'. Tutte queste rappresentazioni esterne di sono viste come '\ n' dal programma Python. Se Python è stato creato senza newlines universali, una modalità con "U" è uguale alla normale modalità testo. Si noti che gli oggetti file così aperti anche hanno un attributo chiamato newlines che ha il valore None (se non sono ancora state visualizzate le newline ), '\ n', '\ r', '\ r \ n' o una tupla contenente tutti i tipi di nuova visione visti.
Come si può leggere nella documentazione Python https://docs.python.org/2/library/functions.html#open
EDIT:
D: Specifica un file temporaneo. Viene cancellato quando l'ultimo puntatore del file viene chiuso.
come potete leggere nel link di @ tmr232.
Il c, n, t, opzioni di modalità S, R, T, e D sono estensioni Microsoft per fopen e _fdopen e non dovrebbero essere utilizzati laddove ANSI portabilità è desiderare
ulteriore aggiornamento:
propongo di presentare il fenomeno come un bug, in quanto l'apertura di un file come di sola lettura cioè con la bandiera "r", quindi permette di cancellare dopo/via clos aggiungendo un singolo carattere come "D", penso che anche per caso sia un serio problema di sicurezza.
Ma, se questo ha alcune funzionalità inevitabili, per favore informami.
'open ('text.txt', 'rD')' per un file esistente su Linux non genera alcun errore per me, sebbene il file non venga cancellato quando chiuso. Sono davvero sorpreso che se fosse vero, questo comportamento è [non documentato] (https://docs.python.org/2/library/functions.html#open). La bandiera 'U' è comunque documentata. – rth
Appena replicato su Windows. Questo è davvero strano. – tmr232
Ho fatto lo stesso errore un momento fa. La menzione è [qui] (https://github.com/python/cpython/blob/2.7/Objects/fileobject.c#L209). Nel fileobject e non nell'io. – tmr232