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
ฉันคิดว่านี่เป็นข้อบกพร่องในหลามเองเพราะหลามสามารถตรวจจับชนิดข้อมูลที่รันไทม์และสามารถตรวจจับระหว่างไบนารีและการป้อนข้อความฉันคิดว่ามันควรได้รับการแก้ไขในหลามเองทำไมหลายร้อยคนจบในหน้านี้ถ้า มันสามารถหลีกเลี่ยงได้โดยคำสั่ง if ใน python stdlib, upvote ถ้าคุณเห็นด้วย, downvote ฉันจะลืมเลือนถ้าคุณต้อง
Felipe Valdes

2
@FelipeValdes โชคไม่ดีที่สามารถแนะนำความประหลาดใจเมื่อเขียนเนื้อหาหากตรวจพบไม่ถูกต้อง ที่น่ารำคาญยิ่งกว่านั้นการตรวจจับที่ไม่ถูกต้องสามารถเกิดขึ้นได้ในบางกรณีที่แปลก ๆ ซึ่งทำให้ประหลาดใจและยากที่จะติดตาม ใช้พฤติกรรมที่ชัดเจนแทนแม้ว่ามันจะหมายความว่าเรามีคำถามนี้รับรองว่าฉันสามารถมั่นใจได้ในวิธีที่ IO ทำงานภายใต้สถานการณ์ที่แตกต่างกัน
Liam Dawson

1
ไฟล์ไบต์จะมีนามสกุลอะไร
เจีย yongkang

@FelipeValdes เกี่ยวข้องกับหลักการของความประหลาดใจ / ความประหลาดใจอย่างน้อยที่สุด ( en.wikipedia.org/wiki/Principle_of_least_astonishment ) วิธีการของคุณจะมีชื่อว่า aptly มากกว่า:open_and_detect_file_type()
henrycjc
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.