2010-05-03 15 views
34

मुझे पढ़ने और लिखने के लिए एक फ़ाइल खोलने की आवश्यकता है। अगर फ़ाइल नहीं मिली है, तो इसे बनाया जाना चाहिए। इसे विंडोज के लिए बाइनरी के रूप में भी माना जाना चाहिए। क्या आप मुझे फ़ाइल मोड अनुक्रम बता सकते हैं जिसके लिए मुझे इसका उपयोग करना है?+ पढ़ने + जोड़ने के लिए फ़ाइल मोड + बाइनरी

मैंने 'r + ab' की कोशिश की लेकिन अगर वे नहीं मिलते हैं तो फाइलें नहीं बनाती हैं।

धन्यवाद

उत्तर

56

मोड ab+r निहित है और 'a'ppend और (' w'rite '+' r'ead) अनावश्यक हैं। चूंकि CPython (अर्थात नियमित अजगर) file सी पर आधारित है FILE प्रकार stdio, यहाँ fopen (3) आदमी पृष्ठ से प्रासंगिक पंक्तियां हैं:

  • पढ़ने और लिखने के लिए

    w + खुला। फ़ाइल बनाई गई है यदि यह मौजूद नहीं है, अन्यथा इसे छोटा कर दिया गया है। स्ट्रीम फ़ाइल की शुरुआत पर स्थित है।

  • ए + पढ़ने और जोड़ने के लिए खुला (फ़ाइल के अंत में लिखना)। फ़ाइल बनाई गई है यदि यह मौजूद नहीं है। पढ़ने के लिए प्रारंभिक फ़ाइल स्थिति फ़ाइल की की शुरुआत में है, लेकिन आउटपुट हमेशा फ़ाइल के अंत में संलग्न है।

"बी" के साथ डॉस को खुश करने के लिए प्रयास किया गया। संभवतः आप ऐसा कुछ करना चाहते हैं:

>>> f = open('junk', 'ab+') 
>>> f 
<open file 'junk', mode 'ab+' at 0xb77e6288> 
>>> f.write('hello\n') 
>>> f.seek(0, os.SEEK_SET) 
>>> f.readline() 
'hello\n' 
>>> f.write('there\n') 
>>> f.seek(0, os.SEEK_SET) 
>>> f.readline() 
'hello\n' 
>>> f.readline() 
'there\n' 
+2

कार्य करता है। आपके उदाहरण में os.SEEK_SET को इंगित करने के लिए भी धन्यवाद। मुझे लगता है कि मैंने फाइल को पहले से खोलने की कोशिश की लेकिन इससे कुछ भी नहीं पढ़ सका। मेरे दिमाग को पार नहीं किया गया था स्ट्रीम को फ़ाइल के अंत में रखा गया था ... –

+1

ध्यान रखें कि आपको * हमेशा * एक * पढ़ने और लिखने, या लिखने और पढ़ने के बीच की तलाश करनी चाहिए। ऐसा करने के लिए भूलना आमतौर पर अधिकांश सिस्टम पर काम करेगा, लेकिन विंडोज़ पर नहीं (उदाहरण के लिए)। –

8
open("filename", "a+b") 

काम करना चाहिए। यह संलग्न/अद्यतन मोड में एक बाइनरी फ़ाइल खोलता है।

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