मुझे निम्न स्तर की भाषाओं में मामलों को याद करना प्रतीत होता है जो एक प्रोग्राम में एक से अधिक बार फ़ाइल खोलने के परिणामस्वरूप एक साझा खोज सूचक हो सकता है। चारों ओर अजगर में थोड़ा खिलवाड़ रूप से, यह मेरे लिए हो रहा हो प्रतीत नहीं होता:क्या Python में एक बार में कई बार फ़ाइल खोलना सुरक्षित है?
$ cat file.txt
first line!
second
third
fourth
and fifth
>>> f1 = open('file.txt')
>>> f2 = open('file.txt')
>>> f1.readline()
'first line!\n'
>>> f2.read()
'first line!\nsecond\nthird\nfourth\nand fifth\n'
>>> f1.readline()
'second\n'
>>> f2.read()
''
>>> f2.seek(0)
>>> f1.readline()
'third\n'
इस व्यवहार सुरक्षित माना जाता है? मुझे एक स्रोत खोजने में कठिनाई हो रही है कि यह ठीक है, और अगर मैं इस पर निर्भर हो सकता हूं तो इससे बहुत मदद मिलेगी।
मैं फ़ाइल ऑब्जेक्ट की विशेषता के रूप में स्थिति नहीं देख रहा हूं, अन्यथा मुझे इसमें अधिक विश्वास होगा। मुझे पता है कि इसे इटरेटर में आंतरिक रूप से रखा जा सकता है, लेकिन उस मामले में idk कैसे .tell() प्राप्त होगा।
>>> dir(f1)
['__class__', '__delattr__', '__doc__', '__getattribute__', '__hash__',
'__init__', '__iter__', '__new__', '__reduce__', '__reduce_ex__', '__repr__',
'__setattr__', '__str__', 'close', 'closed', 'encoding', 'fileno', 'flush',
'isatty', 'mode', 'name', 'newlines', 'next', 'read', 'readinto', 'readline',
'readlines', 'seek', 'softspace', 'tell', 'truncate', 'write', 'writelines',
'xreadlines']
अद्यतन
पृष्ठ पर The Python Essential Reference के 161 यह कहा गया
एक ही फाइल (या अलग अलग कार्यक्रमों में) एक ही कार्यक्रम में एक से अधिक बार खोला जा सकता है। खुली फ़ाइल के प्रत्येक उदाहरण में अपना फ़ाइल पॉइंटर होता है जिसे स्वतंत्र रूप से छेड़छाड़ की जा सकती है।
तो यह परिभाषित व्यवहार
पाइथन में प्रत्येक बार जब आप 'ओपन()' कहते हैं तो यह एक नई फ़ाइल ऑब्जेक्ट (इटरेटर) बनाता है, इसलिए आप सुरक्षित हैं। –
मुझे किसी भी प्लेटफ़ॉर्म के बारे में पता नहीं है जहां आपको यहां विभिन्न खोज पॉइंटर्स बनाए रखने में समस्या हो सकती है। लेकिन ... क्या यह आपके उपयोग के मामले के लिए स्वीकार्य है कि आपका कोड विंडोज़ पर कुछ मामलों में अपवाद खोलने 'एफ 2' बढ़ा सकता है, भले ही यह यूनिक्स पर कभी विफल न हो? – abarnert
@abarnert I केवल यह विंडोज़ पर कभी भी चलाने की उम्मीद करता है, और केवल पढ़ने पर ही। विंडोज़ पर खुलने से सामान्य लॉक सामान्य रूप से प्राप्त होंगे? –