รหัส:
file('pinax/media/a.jpg', 'wb')
รหัส:
file('pinax/media/a.jpg', 'wb')
คำตอบ:
โหมดไฟล์เขียนและไบนารี เนื่องจากคุณกำลังเขียนไฟล์. jpg มันก็ดูดี
แต่ถ้าคุณควรอ่านไฟล์ jpg นั้นคุณต้องใช้ 'rb'
ข้อมูลเพิ่มเติม
ใน Windows 'b' ต่อท้ายโหมดจะเปิดไฟล์ในโหมดไบนารีดังนั้นจึงมีโหมดเช่น 'rb', 'wb' และ 'r + b' ด้วย Python บน Windows สร้างความแตกต่างระหว่างไฟล์ข้อความและไฟล์ไบนารี อักขระท้ายบรรทัดในไฟล์ข้อความจะถูกเปลี่ยนแปลงโดยอัตโนมัติเล็กน้อยเมื่ออ่านหรือเขียนข้อมูล การปรับเปลี่ยนเบื้องหลังของข้อมูลไฟล์นี้ใช้ได้ดีสำหรับไฟล์ข้อความ ASCII แต่จะทำให้ข้อมูลไบนารีเช่นนั้นเสียหายในไฟล์ JPEG หรือ EXE
fd.write("foo\n")
จะเขียนบนดิสก์foo\r\n
(โปรดสังเกต\r
)
wb
บ่งชี้ว่าแฟ้มถูกเปิดสำหรับการเขียนในโหมดไบนารี
เมื่อเขียนในโหมดไบนารี Python จะไม่ทำการเปลี่ยนแปลงข้อมูลเนื่องจากถูกเขียนลงในไฟล์ ในโหมดข้อความ (เมื่อb
ยกเว้นในw
โหมดข้อความหรือเมื่อคุณระบุโหมดข้อความด้วยwt
) อย่างไรก็ตาม Python จะเข้ารหัสข้อความตามการเข้ารหัสข้อความเริ่มต้น นอกจากนี้ Python จะแปลงส่วนท้ายบรรทัด ( \n
) เป็นอะไรก็ได้ที่สิ้นสุดบรรทัดเฉพาะแพลตฟอร์มซึ่งจะทำให้ไฟล์ไบนารีเช่นไฟล์exe
หรือpng
ไฟล์เสียหาย
จึงควรใช้โหมดข้อความเมื่อเขียนไฟล์ข้อความ (ไม่ว่าจะใช้ข้อความธรรมดาหรือรูปแบบข้อความเช่น CSV) ในขณะที่ต้องใช้โหมดไบนารีเมื่อเขียนไฟล์ที่ไม่ใช่ข้อความเช่นรูปภาพ
อ้างอิง:
https://docs.python.org/3/tutorial/inputoutput.html#reading-and-writing-files https://docs.python.org/3/library/functions.html#open
wb
ตัวเลือก การใช้w
ตัวเลือกนี้แทนฉันสามารถทำให้มันทำงานได้อย่างถูกต้อง
b
โหมดนี้มีผลกับ Windows เท่านั้น ตอนนี้ได้ถูกลบออกจากเอกสารแล้วและโหมดไบนารี "ควรใช้กับไฟล์ทั้งหมดที่ไม่มีข้อความ"
นั่นคือโหมดที่คุณกำลังเปิดไฟล์ "wb" หมายความว่าคุณกำลังเขียนไปที่ไฟล์ (w) และคุณกำลังเขียนในโหมดไบนารี (b)
ตรวจสอบเอกสารเพิ่มเติม: clicky
open
เลิกใช้งานใน Python 2 (ไม่พบเวอร์ชันใด) และถูกลบออกใน py3k (ขอบคุณ Scott) ดูคำถามนี้สำหรับข้อมูลเพิ่มเติมfile
file