Python Grava bytes no arquivo


143

Eu tenho uma função que retorna uma string. A sequência contém retornos de carro e novos avanços de linha (0x0D, 0x0A). No entanto, quando escrevo em um arquivo, ele contém apenas os novos feeds de linha. Existe uma maneira de obter a saída para incluir o retorno de carro e o novo avanço de linha.

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

ter uma leitura defile.__doc__
wim

Respostas:


257

Se você deseja escrever bytes, deve abrir o arquivo no modo binário.

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

8
Como o OP parece estar usando uma plataforma não Windows, isso só funciona no Py3. No Py2, você precisaria usar io.open.
LVC

2
Eu acho que isso é um bug do próprio python, dado que o python pode detectar tipos de dados em tempo de execução e pode detectar entre entrada binária e de texto, acho que deve ser corrigida no próprio python, por que centenas de pessoas terminam nesta página, se isso poderia ter sido evitado por uma instrução if no python stdlib, upvote se você concordar, downvote me do esquecimento se você precisar.
Felipe Valdes

2
@FelipeValdes, infelizmente, isso pode causar surpresas ao escrever conteúdo, se ele for detectado incorretamente. Ainda mais irritante, essa detecção incorreta só poderia acontecer em certos casos estranhos que se tornam surpreendentes e difíceis de rastrear. Contar com um comportamento explícito, mesmo que isso signifique que temos essa pergunta, garante que eu possa ter certeza da maneira como a IO se comporta em diferentes cenários.
Liam Dawson

1
qual extensão os arquivos de bytes teriam?
chia yongkang

@FelipeValdes, refere-se ao princípio de menos surpresa / espanto ( en.wikipedia.org/wiki/Principle_of_least_astonishment ). Seu método teria o nome mais apropriado:open_and_detect_file_type()
henrycjc
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.