Python Dosyaya bayt yazma


144

Bir dize döndüren bir işlevi var. Dize satır başı ve yeni satır beslemeleri (0x0D, 0x0A) içerir. Ancak bir dosyaya yazdığımda yalnızca yeni satır beslemeleri içeriyor. Çıktıyı satır başı ve yeni satır beslemesini içerecek şekilde almanın bir yolu var mı?

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

file.__doc__
wim

Yanıtlar:


257

Bayt yazmak istiyorsanız dosyayı ikili modda açmalısınız.

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

8
OP, Windows olmayan bir platform kullanıyor gibi göründüğünden, bu yalnızca Py3'te çalışır. Py2'de kullanmanız gerekir io.open.
lvc

2
Bence bu python kendisi bir hata olduğunu, verilen python veri türlerini zamanında tespit edebilir ve ikili ve metin girişi arasında tespit edebilir, ben python kendisi düzeltilmesi gerektiğini düşünüyorum, neden yüzlerce kişi bu sayfada bitiyor, eğer python stdlib'deki bir if ifadesinden kaçınılabilirdi, kabul ederseniz oy verin, eğer gerekiyorsa beni unutun.
Felipe Valdes

2
@FelipeValdes maalesef, yanlış tespit edildiğinde içerik yazarken sürprizler yaratabilir. Daha da can sıkıcı bir şekilde, bu yanlış algılama ancak şaşırtıcı ve izlenmesi zorlaşan bazı garip uç durumlarda gerçekleşebilir. Bunun yerine açık davranışa güvenmek, bu soruya sahip olduğumuz anlamına gelse bile, IO'nun farklı senaryolar altında davranış biçiminde kesinliğe sahip olmamı sağlar.
Liam Dawson

1
bayt dosyalarının uzantısı nedir?
chia yongkang

@FelipeValdes, en az sürpriz / şaşkınlık ilkesiyle ilgilidir ( en.wikipedia.org/wiki/Principle_of_least_astonishment ). Yönteminiz daha uygun şekilde adlandırılır:open_and_detect_file_type()
henrycjc
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.