Python Menulis byte ke file

156

Saya memiliki fungsi yang mengembalikan string. String berisi carriage return dan feed baris baru (0x0D, 0x0A). Namun ketika saya menulis ke file itu hanya berisi feed baris baru. Apakah ada cara untuk mendapatkan output dengan memasukkan carriage return dan line feed baru.

msg = function(arg1, arg2, arg3)
f = open('/tmp/output', 'w')
f.write(msg)
f.close()
Blackninja543
sumber
membacafile.__doc__
wim

Jawaban:

277

Jika Anda ingin menulis byte maka Anda harus membuka file dalam mode biner.

f = open('/tmp/output', 'wb')
Ignacio Vazquez-Abrams
sumber
8
Karena OP tampaknya menggunakan platform non-Windows, ini hanya berfungsi di Py3. Di Py2, Anda perlu menggunakan io.open.
lvc
2
Saya rasa ini adalah bug di python itu sendiri, mengingat python dapat mendeteksi tipe data saat runtime, dan dapat mendeteksi antara input biner dan teks, menurut saya itu harus diperbaiki di python itu sendiri, mengapa ratusan orang berakhir di halaman ini, jika itu bisa dihindari dengan pernyataan if di python stdlib, upvote jika Anda setuju, downvote saya lakukan pelupaan jika harus.
Felipe Valdes
2
@FelipeValdes sayangnya, hal itu dapat menimbulkan kejutan saat menulis konten jika tidak terdeteksi dengan benar. Yang lebih menyebalkan, deteksi yang salah itu hanya bisa terjadi pada kasus edge aneh tertentu yang menjadi mengejutkan dan sulit dilacak. Mengandalkan perilaku eksplisit sebagai gantinya, bahkan jika itu berarti kita memiliki pertanyaan ini, memastikan bahwa saya dapat memiliki kepastian tentang cara IO berperilaku dalam skenario yang berbeda.
Liam Dawson
1
ekstensi apa yang dimiliki file byte?
chia yongkang
@FelipeValdes berhubungan dengan prinsip paling tidak kejutan / takjub ( en.wikipedia.org/wiki/Principle_of_least_astonishment ). Metode Anda akan lebih tepat dinamai:open_and_detect_file_type()
henrycjc
2

Tulis byte dan buat file jika tidak ada:

f = open('./put/your/path/here.png', 'wb')
f.write(data)
f.close()
yaya
sumber
dapat membuat file (baru) tanpa +nilai wb+seperti yang disebutkan dalam jawaban Anda. Jadi jalankan saja, python with open('data.csv', 'wb') as file_obj: file_obj.write(csv_data) Sesuai bantuan (buka) di REPL dan python docs Py3.7 # reading & writingfiles
Isaac Philip
@IsaacPhilip bekerja untuk saya tanpa + juga, jadi memperbarui jawabannya.
yaya