Python Viết byte vào tệp


143

Tôi có một hàm trả về một chuỗi. Chuỗi chứa lợi nhuận vận chuyển và nguồn cấp dữ liệu mới (0x0D, 0x0A). Tuy nhiên, khi tôi ghi vào một tệp, nó chỉ chứa các nguồn cấp dữ liệu mới. Có cách nào để có được đầu ra bao gồm lợi nhuận vận chuyển và nguồn cấp dữ liệu mới.

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

hãy đọcfile.__doc__
wim

Câu trả lời:


257

Nếu bạn muốn viết byte thì bạn nên mở tệp ở chế độ nhị phân.

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

8
Vì OP dường như đang sử dụng nền tảng không phải Windows, nên điều này chỉ hoạt động trong Py3. Trong Py2, bạn sẽ cần sử dụng io.open.
lvc

2
Tôi nghĩ rằng đây là một lỗi trong python, do python có thể phát hiện các kiểu dữ liệu khi chạy và có thể phát hiện giữa nhập nhị phân và nhập văn bản, tôi nghĩ rằng nó nên được sửa trong chính python, tại sao hàng trăm người kết thúc trong trang này, nếu nó có thể tránh được bằng một câu lệnh if trong stdlib python, upvote nếu bạn đồng ý, downvote tôi làm lãng quên nếu bạn phải.
Felipe Valdes

2
Thật không may @FelipeValdes, điều đó có thể gây ra những bất ngờ khi viết nội dung nếu nó bị phát hiện không chính xác. Thậm chí khó chịu hơn, việc phát hiện không chính xác chỉ có thể xảy ra trong một số trường hợp cạnh kỳ lạ trở nên đáng ngạc nhiên và khó theo dõi. Thay vào đó, dựa vào hành vi rõ ràng, ngay cả khi điều đó có nghĩa là chúng tôi có câu hỏi này, đảm bảo rằng tôi có thể có sự chắc chắn trong cách hành xử của IO trong các tình huống khác nhau.
Liam Dawson

1
các tập tin byte sẽ có phần mở rộng nào?
chia yong Khang

@FelipeValdes nó liên quan đến nguyên tắc ít ngạc nhiên / ngạc nhiên nhất ( en.wikipedia.org/wiki/Principl_of_least_astonemony ). Phương pháp của bạn sẽ được đặt tên khéo léo hơn:open_and_detect_file_type()
henrycjc
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.