Python Scrive byte nel file


143

Ho una funzione che restituisce una stringa. La stringa contiene ritorni a capo e nuovi avanzamenti di riga (0x0D, 0x0A). Tuttavia, quando scrivo su un file, contiene solo i nuovi feed di riga. Esiste un modo per ottenere che l'output includa il ritorno a capo e il nuovo avanzamento riga.

msg = function(arg1, arg2, arg3)
f = open('/tmp/output', 'w')
f.write(msg)
f.close()

leggifile.__doc__
wim

Risposte:


257

Se si desidera scrivere byte, è necessario aprire il file in modalità binaria.

f = open('/tmp/output', 'wb')

8
Poiché OP sembra utilizzare una piattaforma non Windows, funziona solo in Py3. In Py2, dovresti usare io.open.
PVC

2
Penso che questo sia un bug in Python stesso, dato che Python può rilevare i tipi di dati in fase di runtime e può rilevare tra input binario e testo, penso che dovrebbe essere risolto in Python stesso, perché centinaia di persone finiscono in questa pagina, se avrebbe potuto essere evitato da un'istruzione if nello stdlib di Python, vota se sei d'accordo, downvote fammi dimenticare se devi.
Felipe Valdes,

2
@FelipeValdes, sfortunatamente, potrebbe introdurre sorprese quando si scrivono contenuti se non vengono mai rilevati in modo errato. Ancora più fastidiosamente, il rilevamento errato potrebbe avvenire solo in alcuni strani casi limite che diventano sorprendenti e difficili da rintracciare. Affidarsi invece a comportamenti espliciti, anche se ciò significa che abbiamo questa domanda, mi assicura che io possa avere certezza nel modo in cui IO si comporta in diversi scenari.
Liam Dawson,

1
quale estensione avrebbero i file byte?
Chia Yongkang,

@FelipeValdes si riferisce al principio del minimo stupore / stupore ( en.wikipedia.org/wiki/Principle_of_least_astonishment ). Il tuo metodo si open_and_detect_file_type()
chiamerebbe
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.