'wb' หมายถึงอะไรในรหัสนี้โดยใช้ Python


108

รหัส:

file('pinax/media/a.jpg', 'wb')

นอกจากนี้คุณควรพิจารณาใช้แทนopen เลิกใช้งานใน Python 2 (ไม่พบเวอร์ชันใด) และถูกลบออกใน py3k (ขอบคุณ Scott) ดูคำถามนี้สำหรับข้อมูลเพิ่มเติม filefile
Luiz Damim

1
ใช้openแทนfileซึ่งเลิกใช้แล้วใน Python 2 และนำออกใน Python 3 ดูstackoverflow.com/questions/112970/…
Max Ghenis

2
มันไม่ยุติธรรมจริงๆที่จะถือว่าเป็นรหัสของ OP โดยเฉพาะอย่างยิ่งเมื่อพิจารณาจากลักษณะของคำถาม เห็นได้ชัดว่าใช้ได้ในครั้งเดียว
mckenzm

คำตอบ:


114

โหมดไฟล์เขียนและไบนารี เนื่องจากคุณกำลังเขียนไฟล์. jpg มันก็ดูดี

แต่ถ้าคุณควรอ่านไฟล์ jpg นั้นคุณต้องใช้ 'rb'

ข้อมูลเพิ่มเติม

ใน Windows 'b' ต่อท้ายโหมดจะเปิดไฟล์ในโหมดไบนารีดังนั้นจึงมีโหมดเช่น 'rb', 'wb' และ 'r + b' ด้วย Python บน Windows สร้างความแตกต่างระหว่างไฟล์ข้อความและไฟล์ไบนารี อักขระท้ายบรรทัดในไฟล์ข้อความจะถูกเปลี่ยนแปลงโดยอัตโนมัติเล็กน้อยเมื่ออ่านหรือเขียนข้อมูล การปรับเปลี่ยนเบื้องหลังของข้อมูลไฟล์นี้ใช้ได้ดีสำหรับไฟล์ข้อความ ASCII แต่จะทำให้ข้อมูลไบนารีเช่นนั้นเสียหายในไฟล์ JPEG หรือ EXE


4
ที่จริงแล้วใน Windows สำหรับไฟล์ที่เปิดในโหมดข้อความfd.write("foo\n")จะเขียนบนดิสก์foo\r\n(โปรดสังเกต\r)
Serge Ballesta

4
ฉันค่อนข้างมั่นใจว่า 'b' เปิดไฟล์ในโหมดไบนารีบนทุกแพลตฟอร์มไม่ใช่แค่ Windows หรือจะมีข้อแม้มากมายที่นี่เช่นกัน
mckenzm

77

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


1
สิ่งนี้อาจมีการเปลี่ยนแปลงอยู่ตลอดเวลา บน Ubuntu 18.04 ที่ใช้ Python 3.6.8 'โหมดไบนารี' มีความสำคัญอย่างแน่นอน ฉันพบข้อผิดพลาดในการพยายามเขียนลงในไฟล์ข้อความ (รูปแบบ CSV ไม่ใช่ว่าท้ายที่สุดแล้วจะมีความสำคัญมากขนาดนั้น) ที่เปิดด้วยwbตัวเลือก การใช้wตัวเลือกนี้แทนฉันสามารถทำให้มันทำงานได้อย่างถูกต้อง
TheDavidJohnson

1
ขอบคุณสำหรับความคิดเห็นของคุณ @TheDavidJohnson ย้อนกลับไปใน Python 2.6 เอกสารกล่าวว่าbโหมดนี้มีผลกับ Windows เท่านั้น ตอนนี้ได้ถูกลบออกจากเอกสารแล้วและโหมดไบนารี "ควรใช้กับไฟล์ทั้งหมดที่ไม่มีข้อความ"
Daniel G

1
แน่นอน @ แดเนียล! ฉันขอขอบคุณที่คุณโพสต์วิธีแก้ปัญหาของคุณ มากกว่า 9 ปีต่อมามันยังคงเป็นประโยชน์ นั้นยอดเยี่ยมขนาดไหน? ไม่ว่าในกรณีใดฉันแค่ต้องการเพิ่มข้อมูลใหม่สำหรับคนอื่น ๆ เช่นฉันที่อาจยังคงเข้ามาและพบว่าสิ่งนี้มีประโยชน์ ไชโย!
TheDavidJohnson

คำอธิบายที่ยอดเยี่ยม หนึ่งชี้แจงอย่างไร: คุณบอกว่า"โหมดข้อความจึงควรใช้เมื่อการเขียนไฟล์ข้อความ" เพื่อความสมบูรณ์ฉันขอย้อนกลับไปที่ความคิดเห็นก่อนหน้านี้ของคุณว่า "Python ไม่ทำการเปลี่ยนแปลง [ในโหมดไบนารี]" และเพิ่มว่าคุณจะใช้โหมดไบนารีกับไฟล์ข้อความเมื่อไม่ทราบ (หรือสนใจ) ว่าการเข้ารหัสคืออะไร แต่ต้องอ่านหรือเขียนไบต์หรือถ้าคุณต้องการรักษาส่วนท้ายบรรทัดโดยไม่คำนึงถึงแพลตฟอร์ม
pcdev

8

นั่นคือโหมดที่คุณกำลังเปิดไฟล์ "wb" หมายความว่าคุณกำลังเขียนไปที่ไฟล์ (w) และคุณกำลังเขียนในโหมดไบนารี (b)

ตรวจสอบเอกสารเพิ่มเติม: clicky

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.