2015-07-19 6 views
19

मैंने देखा है कि, दस्तावेज़ मोड के अलावा, विंडोज एक्सपी और पायथन में पायथन 2.7.5.1 फ़ाइलों को पढ़ने पर कम से कम U और D मोड स्वीकार करता है। मोड U का उपयोग numpy के genfromtxt में किया जाता है। मोड D, प्रभाव है कि फ़ाइल हटा दी जाती है है प्रति निम्नलिखित कोड टुकड़ा के रूप में:पायथन फ़ाइल खुले फ़ंक्शन मोड

f = open('text.txt','rD') 
print(f.next()) 
f.close() # file text.txt is deleted when closed 

किसी को भी इन विधियों के बारे में अधिक पता है, विशेष रूप से है कि क्या वे Linux सिस्टम पर भी लागू भाषा की एक स्थायी विशेषता है?

+3

'खुला (' text.txt ',' rD ') 'मेरे लिए कोई त्रुटि नहीं उठाता है, हालांकि बंद होने पर फ़ाइल हटाई नहीं जाती है। मैं वास्तव में हैरान हूं कि यदि सही है, तो यह व्यवहार [दस्तावेज नहीं है] (https://docs.python.org/2/library/functions.html#open)। हालांकि 'यू' ध्वज दस्तावेज है। – rth

+2

बस इसे विंडोज़ पर दोहराया। यह वास्तव में बहुत अजीब है। – tmr232

+3

मैंने एक पल पहले एक ही गलती की थी। उल्लेख है [यहां] (https://github.com/python/cpython/blob/2.7/Objects/fileobject.c#L209)। Fileobject में और आईओ नहीं। – tmr232

उत्तर

8

D ध्वज विंडोज विशिष्ट प्रतीत होता है। here वर्णित अनुसार, विंडोज़ अपने सीआरटी में fopen फ़ंक्शन में कई झंडे जोड़ता प्रतीत होता है।

जबकि पायथन मोड स्ट्रिंग को फ़िल्टर करता है यह सुनिश्चित करने के लिए कि कोई त्रुटि उत्पन्न नहीं होती है, यह कुछ विशेष झंडे की अनुमति देता है, जैसा कि पाइथन स्रोत here में देखा जा सकता है। विशेष रूप से, ऐसा लगता है कि N झंडा बाहर फ़िल्टर किया जाता है, जबकि T और D झंडे अनुमति दी जाती है:

while (*++mode) { 
    if (*mode == ' ' || *mode == 'N') /* ignore spaces and N */ 
     continue; 
    s = "+TD"; /* each of this can appear only once */ 
    ... 

मैं प्रलेखित विकल्पों के लिए चिपके कोड पार मंच रखने के लिए सुझाव है। लिनक्स पर मौजूदा फाइल के लिए

+3

विंडोज़ [CreateFile] पर भी प्रलेखन देखें (https://msdn.microsoft.com/en-us/library/windows/desktop /aa363858%28v=vs.85%29.aspx) फ़ंक्शन। –

+2

"मैं दस्तावेजी विकल्पों पर चिपके रहने का सुझाव दूंगा" याय! यह भी देखें [मॉड्यूल tempfile] (https://docs.python.org/2/library/tempfile.html?highlight=tempfile#tempfile.TemporaryFile) – msw

5

यह थोड़ा भ्रामक है। open() मोड तर्क के रूप में किसी भी चरित्र को स्वीकार करता है, जबकि आप एक वैध पास करते हैं i.e .: "w,r,b,+,a"

इस प्रकार आप लिख सकते हैं: open("fname", "w+ANYTHINGYOUWANT")। यह फ़ाइल को open("fname", "w+") के रूप में खोल देगा। और open("fname", "rANYTHINGYOUWANT")। फ़ाइल को open("fname", "w+") के रूप में खुल जाएगा।

के बारे में "यू" झंडा:

मानक fopen के अतिरिक्त() को महत्व देता मोड 'यू' या 'आरयू' हो सकता है। पायथन आमतौर पर सार्वभौमिक न्यूलाइन समर्थन के साथ बनाया जाता है; 'यू' की आपूर्ति फ़ाइल को एक टेक्स्ट फ़ाइल के रूप में खोलती है, लेकिन लाइनों को में से किसी भी द्वारा समाप्त किया जा सकता है: यूनिक्स एंड-ऑफ़-लाइन कन्वेंशन '\ n', मैकिंतोश सम्मेलन 'आर', या विंडोज सम्मेलन '\ r \ n'। इन सभी बाहरी प्रतिनिधित्व को पायथन प्रोग्राम द्वारा '\ n' के रूप में देखा जाता है। यदि पाइथन सार्वभौमिक न्यूलाइन के बिना बनाया गया है तो 'यू' के साथ एक मोड का समर्थन सामान्य टेक्स्ट मोड जैसा ही है। ध्यान दें कि फ़ाइल ऑब्जेक्ट्स को भी खोला गया है में न्यूलाइन नामक एक विशेषता है जिसका कोई मूल्य नहीं है (यदि न्यूलाइन अभी तक नहीं देखी गई है), '\ n', '\ r', '\ r \ n', या एक tuple में देखा गया सभी न्यूलाइन प्रकार शामिल हैं।

आप अजगर दस्तावेज में पढ़ सकते हैं के रूप में https://docs.python.org/2/library/functions.html#open

संपादित करें:

डी: एक फ़ाइल के रूप में अस्थायी निर्दिष्ट करता है। यह हटा दिया जाता है जब अंतिम फ़ाइल सूचक बंद है।

जैसा कि आप @ tmr232 के लिंक में पढ़ सकते हैं।

सी, एन, टी, एस, आर, टी, और डी मोड विकल्प माइक्रोसॉफ्ट एक्सटेंशन fopen के लिए और _fdopen और जहां एएनएसआई पोर्टेबिलिटी वांछित

है नहीं किया जाना चाहिए रहे हैं इसके अलावा अद्यतन:

मैं एक बग के रूप में घटना प्रस्तुत करने का प्रस्ताव है, क्योंकि एक फ़ाइल को खोलने के रूप में ध्वज "आर" के साथ ही यानी पढ़ते हैं, फिर/के माध्यम से क्लोस के बाद उन्हें हटा सकते हैं इसे "डी" जैसे एक चरित्र को जोड़ना, यहां तक ​​कि गलती से एक गंभीर सुरक्षा समस्या है, मुझे लगता है।

लेकिन, अगर इसमें कुछ अपरिहार्य कार्यक्षमता है, तो कृपया मुझे सूचित करें।

+1

मैं इसे पुन: उत्पन्न करने में सक्षम नहीं हो सका, लेकिन शायद यह कुछ अन्य गुप्त फ़ाइल समस्या है, मुझे लगता है? – Geeocode

+1

@rth इसे पुन: उत्पन्न किया गया था ऊपर tmr232 प्रतिक्रिया देखें, क्या आप यू दस्तावेज़ीकरण के लिए एक संदर्भ दे देंगे? – NameOfTheRose

+0

@ GyörgySolymosi क्या आप कृपया पाइथन और ओएस संस्करण – NameOfTheRose

संबंधित मुद्दे