Python Введіть байти у файл


143

У мене є функція, яка повертає рядок. Рядок містить повернення каретки та нові канали рядків (0x0D, 0x0A). Однак, коли я пишу у файл, він містить лише нові канали рядків. Чи є спосіб отримати вихід, щоб включити повернення каретки та новий канал каналу.

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

прочитатиfile.__doc__
Wim

Відповіді:


257

Якщо ви хочете писати байти, вам слід відкрити файл у двійковому режимі.

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

8
Оскільки, здається, OP використовує платформу, яка не є Windows, це працює лише в Py3. У Py2 вам потрібно буде скористатися io.open.
lvc

2
Я думаю, що це помилка в самій python. Даний python може виявляти типи даних під час виконання, а також може виявляти між бінарним та введенням тексту, я думаю, що це має бути виправлено у самій python, чому сотні людей потрапляють на цю сторінку, якщо цього можна було б уникнути, якщо вислів у python stdlib, upvote, якщо ви згодні, downvote мені робити забуття, якщо потрібно.
Феліпе Вальдес

2
@FelipeValdes, на жаль, це може внести сюрпризи при написанні вмісту, якщо він коли-небудь був виявлений неправильно. Ще більше дратує те, що неправильне виявлення могло трапитися лише у певних дивних крайніх випадках, які стають несподіваними та важкими для відстеження. Натомість покладаючись на явну поведінку, навіть якщо це означає, що ми маємо це питання, гарантує, що я можу бути впевненим у поведінці IO при різних сценаріях.
Ліам Доусон

1
яке розширення мали б байтові файли?
chia yongkang

@FelipeValdes це стосується принципу найменшого здивування / здивування ( en.wikipedia.org/wiki/Principle_of_least_astonishment ). Ваш метод був би open_and_detect_file_type()
доречнішим
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.