आप भ्रमित कर रहे हैं में निर्मित os
मॉड्यूल द्वारा प्रदान की os.open()
साथ open()
कार्य करते हैं। वे काफी अलग हैं; os.open(filename, "w")
वैध पायथन नहीं है (os.open
इसके दूसरे तर्क के रूप में पूर्णांक ध्वज स्वीकार करता है), open(filename, "w")
है।
संक्षेप में, open()
नई फ़ाइल वस्तुओं बनाता है, os.open()
बनाता ओएस-स्तर फ़ाइल वर्णनकर्ता, और os.fdopen()
एक फ़ाइल वर्णनकर्ता के बाहर एक फ़ाइल वस्तु बनाता है।
फ़ाइल डिस्क्रिप्टर सीधे ऑपरेटिंग सिस्टम कर्नेल द्वारा प्रदान की गई फ़ाइलों के साथ काम करने के लिए निम्न स्तर की सुविधा हैं। एक फ़ाइल डिस्क्रिप्टर एक छोटा पूर्णांक होता है जो प्रत्येक प्रक्रिया के लिए कर्नेल द्वारा रखी गई खुली फ़ाइलों की एक तालिका में खुली फ़ाइल की पहचान करता है। कई सिस्टम कॉल फ़ाइल डिस्क्रिप्टर स्वीकार करते हैं, लेकिन वे काम करने के लिए सुविधाजनक नहीं हैं, आमतौर पर निश्चित-चौड़ाई वाले बफर की आवश्यकता होती है, कुछ स्थितियों में एकाधिक रीट्रीज़ और मैन्युअल त्रुटि हैंडलिंग की आवश्यकता होती है।
फ़ाइल ऑब्जेक्ट्स पाइथन कक्षाएं हैं जो फ़ाइलों के साथ काम करने के लिए फाइल डिस्क्रिप्टर को अधिक सुविधाजनक और कम त्रुटि-प्रवण बनाती हैं। वे उदाहरण के लिए, त्रुटि-हैंडलिंग, बफरिंग, लाइन-बाय-लाइन रीडिंग, वर्णसेट रूपांतरण प्रदान करते हैं, और कचरा इकट्ठा होने पर बंद होते हैं।
पुनरावृत्ति करने के लिए:
निर्मित open()
एक फ़ाइल नाम लेता है और एक नया अजगर फ़ाइल वस्तु देता है। अधिकांश मामलों में आपको यही चाहिए।
os.open()
फ़ाइल का नाम लेता है और एक नया फ़ाइल डिस्क्रिप्टर देता है। इस फ़ाइल डिस्क्रिप्टर को नीचे दिए गए अनुसार निम्न निम्न-स्तरीय फ़ंक्शंस जैसे os.read()
और os.write()
, या os.fdopen()
पर पारित किया जा सकता है। आपको कोड लिखते समय केवल इसकी आवश्यकता होती है जो ऑपरेटिंग-सिस्टम-निर्भर API पर निर्भर करता है, जैसे O_EXCL
open(2)
पर ध्वज का उपयोग करना।
os.fdopen()
किसी मौजूदा फ़ाइल वर्णनकर्ता लेता है - आम तौर पर इस तरह के pipe()
या dup()
के रूप में यूनिक्स प्रणाली कॉल द्वारा उत्पादित, और इसके चारों ओर एक अजगर फ़ाइल वस्तु बनाता है। प्रभावी रूप से यह एक फ़ाइल डिस्क्रिप्टर को एक पूर्ण फ़ाइल ऑब्जेक्ट में परिवर्तित करता है, जो सी कोड या एपीआई के साथ इंटरफेसिंग करते समय उपयोगी होता है जो केवल निम्न-स्तर फ़ाइल डिस्क्रिप्टर बनाते हैं।
निर्मित open
os.open()
(एक फ़ाइल विवरणक बनाने के लिए) का उपयोग कर लागू किया जा सकता और os.fdopen()
(एक फ़ाइल वस्तु में लपेट के लिए):
# equivalent to open(filename, "r")
f = os.fdopen(os.open(filename, os.O_RDONLY))
करने के लिए [डॉक्स] (http अनुसार: //docs.python.org/2/library/os.html#os.open), os.open() एक फ़ाइल डिस्क्रिप्टर देता है, जबकि बिल्टिन ओपन() एक फ़ाइल ऑब्जेक्ट देता है। – Octipi