मैं सिर्फ इसलिए इस खुले रहते हैं नहीं है जवाब देंगे हमेशा के लिए ;-)
वहाँ कहने के लिए वास्तव में कम है: के रूप में आप पहले से ही बताया गया है, एक file
वस्तु अधिक सुविधाजनक है। में मामलों में यह और अधिक कार्यात्मक है; उदाहरण के लिए, वह अपने (file_object.readline()
की तरह) गति लाइन उन्मुख पाठ संचालन के बफरिंग की अपनी परत (btw, कि एक कारण यह धीमी भी है।) करता है और एक file
वस्तु सभी प्लेटफार्मों में एक ही तरह काम करने के लिए प्रयास करता है।
लेकिन आप की जरूरत है/नहीं है, तो चाहते हैं कि, कुछ भी नहीं है सब पर बजाय निचले स्तर & zippier os
फ़ाइल वर्णनकर्ता कार्यों का उपयोग कर के साथ कुछ गलत। वहाँ बाद के कई हैं, और सभी नहीं सभी प्लेटफार्मों पर समर्थन कर रहे हैं, और सभी विकल्पों सभी प्लेटफार्मों पर समर्थित हैं। निस्संदेह आप अपने प्लेटफार्मों के चौराहे में & विकल्पों के संचालन के लिए अपने आप को प्रतिबंधित करने के लिए ज़िम्मेदार हैं (जो आमतौर पर os
में सभी कार्यों के बारे में सच है, न केवल इसकी फाइल डिस्क्रिप्टर फ़ंक्शंस - नाम os
एक मजबूत संकेत है कि इसमें मौजूद सामान ओएस-निर्भर हो सकता है)।
अजगर 2 और 3 के संबंध में, मतभेद मजबूत भेद अजगर 3 "पाठ" और सभी प्लेटफार्मों पर "बाइनरी" मोड के बीच में आता है की वजह से कर रहे हैं। यह एक यूनिकोड दुनिया है, और file
वस्तुओं के लिए "टेक्स्ट मोड" इच्छित एन्कोडिंग निर्दिष्ट किए बिना कोई समझ नहीं आता है। अजगर 3 में, एक file
वस्तु पढ़ने विधि एक str
वस्तु (एक यूनिकोड स्ट्रिंग) फ़ाइल "पाठ मोड" में खोला गया था, तो देता है, लेकिन एक bytes
वस्तु "बाइनरी मोड" में हैं। इसी प्रकार लेखन विधियों के लिए।
क्योंकि os
फ़ाइल वर्णनकर्ता तरीकों एन्कोडिंग का बोध भी नहीं है, वे केवल चाहे, जैसे, विंडोज पर, फ़ाइल वर्णनकर्ता निम्न स्तर के साथ खोला गया था परवाह किए बिना अजगर 3 (में बाइट्स की तरह वस्तुओं के साथ काम कर सकते हैं os.open()
O_BINARY
या O_TEXT
झंडे)।
अभ्यास में, उदाहरण आपके द्वारा दिया गया है, यह सिर्फ मतलब है कि आप करने के लिए
b"A"
नोट
"A"
के उदाहरण को बदलने के लिए है कि आप भी एक में b"..."
शाब्दिक वाक्य विन्यास का उपयोग कर सकते हैं के लिए होता है पाइथन 2 का हालिया संस्करण, हालांकि यह अभी भी पायथन 2 में केवल एक स्ट्रिंग अक्षर है। पायथन 3 में यह एक अलग प्रकार की वस्तु (bytes
) को इंगित करता है, और फ़ाइल डिस्क्रिप्टर फ़ंक्शन बाइट्स जैसी वस्तुओं को लिखने और वापस करने के लिए प्रतिबंधित हैं।
लेकिन अगर आप "बाइनरी डेटा" के साथ काम कर रहे हैं, कि कोई प्रतिबंध नहीं सब पर है। यदि आप "टेक्स्ट डेटा" के साथ काम कर रहे हैं, तो हो सकता है (अनुमान लगाने के लिए आपके विनिर्देशों के बारे में पर्याप्त जानकारी नहीं है)।
पायथन का कौन सा संस्करण? – user2682863
@ user2682863, यह पायथन 2 होना चाहिए - पायथन 3 में निम्न स्तर के आईओ ऑप्स की आवश्यकता होती है और स्ट्रिंग्स के बजाय "बाइट्स जैसी ऑब्जेक्ट्स" की आवश्यकता होती है। यही है, यह कोड पी 3 के तहत नहीं चलेगा। –
मैं 2 का उपयोग कर रहा हूं, लेकिन अगर 0 में उल्लेखनीय अंतर हैं तो 0 उत्सुक हैं। – Ben