पायथन का उपयोग करके इस कोड में 'wb' का क्या अर्थ है?


107

कोड:

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

इसके अलावा आपको इसके openबजाय का उपयोग करने पर विचार करना चाहिए filefileअजगर 2 में पदावनत किया गया (कौन सा संस्करण नहीं मिला) और py3k में हटा दिया गया है। (धन्यवाद स्कॉट) अधिक जानकारी के लिए यह प्रश्न देखें ।
लुइज डेमिम

1
openइसके बजाय का उपयोग करें file, जो अजगर 2 में हटा दिया गया था और अजगर 3 में हटा दिया गया था। देखें। stackoverflow.com/questions/112970/…
Max Ghenis

2
यह मान लेना उचित नहीं है कि यह ओपी का अपना कोड है, विशेषकर प्रश्न की प्रकृति को देखते हुए। यह स्पष्ट रूप से एक समय में मान्य था।
mckenzm

जवाबों:


112

फाइल मोड , राइट और बाइनरी। जब से आप .jpg फ़ाइल लिख रहे हैं, यह ठीक लग रहा है।

लेकिन अगर आप उस jpg फाइल को पढ़ना चाहते हैं, जिसका आपको उपयोग करना है 'rb'

और जानकारी

विंडोज पर, मोड में संलग्न 'बी' फ़ाइल को बाइनरी मोड में खोलता है, इसलिए 'आरबी', 'डब्ल्यूबी' और 'आर + बी' जैसे मोड भी हैं। विंडोज पर पायथन पाठ और बाइनरी फ़ाइलों के बीच अंतर करता है; जब डेटा पढ़ा या लिखा जाता है तो टेक्स्ट फ़ाइलों में अंत-पंक्ति वर्ण स्वचालित रूप से थोड़े बदल जाते हैं। डेटा को फ़ाइल करने के लिए पर्दे के पीछे का यह संशोधन ASCII टेक्स्ट फ़ाइलों के लिए ठीक है, लेकिन यह JPEG या EXE फ़ाइलों की तरह ही द्विआधारी डेटा को भ्रष्ट कर देगा।


4
पाठ मोड में खोली गई फ़ाइल के लिए विंडोज में, fd.write("foo\n")वास्तव में , डिस्क पर लिखता है foo\r\n(नोट करें \r)।
सर्ग बलेस्टा

4
मुझे पूरा यकीन है कि 'बी' हर प्लेटफॉर्म पर बाइनरी मोड में फाइलें खोलता है, न कि सिर्फ विंडोज पर या यहां भी एक विशाल कैवेट होगा।
mckenzm

76

wbइंगित करता है कि फ़ाइल द्विआधारी मोड में लिखने के लिए खोला जाता है।

बाइनरी मोड में लिखते समय, पायथन डेटा में कोई बदलाव नहीं करता है क्योंकि यह फ़ाइल में लिखा है। पाठ मोड में (जब आप के bरूप में wया जब आप पाठ मोड निर्दिष्ट करते हैं, तो इसे बाहर रखा जाता है wt), हालांकि, पायथन डिफ़ॉल्ट पाठ एन्कोडिंग के आधार पर पाठ को एन्कोड करेगा। इसके अतिरिक्त, पाइथन लाइन-एंडिंग ( \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
समय के साथ इसमें बदलाव आया। उबंटू 18.04 पर पायथन 3.6.8 पर चल रहा है, 'बाइनरी मोड' निश्चित रूप से मायने रखता है। मुझे एक टेक्स्ट फ़ाइल (CSV प्रारूप में लिखने की कोशिश करने में त्रुटि हुई, यह नहीं कि यह अंततः उतना ही मायने रखता है) जो wbविकल्प के साथ खोला गया था । wइसके बजाय विकल्प का उपयोग करके , मैं इसे ठीक से काम करने में सक्षम था।
TheDavidJohnson

1
आपकी टिप्पणी के लिए धन्यवाद @TheDavidJohnson वापस अजगर 2.6 में, डॉक्स ने कहा कि bमोड का केवल विंडोज पर प्रभाव था। वह अब दस्तावेज़ीकरण से हटा दिया गया है और बाइनरी मोड "उन सभी फ़ाइलों के लिए उपयोग किया जाना चाहिए जिसमें पाठ शामिल नहीं है"।
डैनियल जी

1
पक्की बात, @ डैनियल! मैं आपको अपने समाधान पोस्ट करने की सराहना करता हूं। 9 साल से अधिक समय बाद, यह अभी भी मददगार है। वह कितना महान है? किसी भी मामले में, मैं सिर्फ मेरे जैसे दूसरों के लिए कुछ नई जानकारी जोड़ना चाहता था जो अभी भी साथ आ सकते हैं और यह मददगार हो सकते हैं। चीयर्स!
TheDavidJohnson

महान व्याख्या। एक स्पष्टीकरण, हालांकि: आप कहते हैं "पाठ फ़ाइलों को लिखते समय पाठ मोड का उपयोग किया जाना चाहिए" । पूर्णता के लिए, मैं आपके पहले की टिप्पणी पर वापस लौटूंगा कि "पायथन बाइनरी मोड में कोई बदलाव नहीं करता है", और यह जोड़ें कि आप बाइनरी मोड का उपयोग एक टेक्स्ट फ़ाइल पर करेंगे जब या तो पता नहीं होगा (या देखभाल) कि एन्कोडिंग क्या है। लेकिन बस बाइट्स पढ़ने या लिखने की ज़रूरत है, या यदि आप प्लेटफ़ॉर्म की परवाह किए बिना लाइन एंडिंग को संरक्षित करना चाहते हैं।
पीसीदेव

8

यह वह मोड है जिसके साथ आप फ़ाइल खोल रहे हैं। "wb" का अर्थ है कि आप फ़ाइल (w) को लिख रहे हैं, और यह कि आप बाइनरी मोड (b) में लिख रहे हैं।

अधिक के लिए दस्तावेज़ की जाँच करें: clicky

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.