2013-10-09 7 views
6

पायथन/प्रोग्रामिंग नौसिखिया यहां।पायथन - "IOError: [Errno 0] त्रुटि"। मेरे कोड में इस त्रुटि को ट्रिगर कर रहा है?

मेरे पास एक ऐसी स्क्रिप्ट है जो फ़ाइल में कुछ जोड़ना चाहती है, लेकिन यह एक त्रुटि उत्पन्न कर रही है जिसे मैं समझ नहीं पा रहा हूं और यह सुनिश्चित नहीं करता कि यह कैसे ट्रिगर किया जा रहा है।

Traceback (most recent call last): 
    File "D:\Magic Briefcase\My Python Scripts\Spin Scripts\synonyms\testing2.py", line 16, in <module> 
    append_2synonym(words_list, num_words) 
    File "D:\Magic Briefcase\My Python Scripts\Spin Scripts\synonyms\testing2.py", line 12, in append_2synonym 
    f.write("\n" + num_words) 
IOError: [Errno 0] Error 
[Finished in 0.1s with exit code 1] 
:

five kiddiewinks|five kids|five children 
mobile phone|cell phone|cellular phone 
stinky cheese|smelly cheese 

यहाँ पूर्ण त्रुटि मैं हो रही है:

import re 

num_words = "four kiddiewinks|four children|four kids" 
words_list = num_words.split('|') 

def append_2synonym(words_list, num_words): 
    with open('test2 words.txt', 'a+') as f: 
     read_f = f.read() 
     patt = r'^' + words_list[0] + '\|' 
     result = re.search(patt, read_f, re.MULTILINE) 
     if result == None: 
      f.write("\n" + num_words) 
     else: 
      print "\nNo match found in '2 words.txt' file" 

append_2synonym(words_list, num_words) 

यहाँ 'test2 words.txt' फ़ाइल की सामग्री है:

यहाँ कोड है

किसी भी मदद की सराहना चीयर्स डैरेन

+0

http://stackoverflow.com/questions/11176724/python-file-operations के समान दिखता है, क्या आप विंडोज पर हैं? –

+0

हां, मैं विंडोज 7 –

उत्तर

7

Python file operations से उत्तर उद्धरण, विंडोज़ पर पढ़ने और लिखने के बीच स्विच करते समय, एक हस्तक्षेप fflush, fsetpos, fseek, या रिवाइंड ऑपरेशन होना चाहिए।

import re 

num_words = "four kiddiewinks|four children|four kids" 
words_list = num_words.split('|') 

def append_2synonym(words_list, num_words): 
    with open('test2 words.txt', 'a+') as f: 
     read_f = f.read() 
     patt = r'^' + words_list[0] + '\|' 
     result = re.search(patt, read_f, re.MULTILINE) 
     if result == None: 
      f.seek(0,2) # change is here !! 
      f.write("\n" + num_words) 
     else: 
      print "\nNo match found in '2 words.txt' file" 

append_2synonym(words_list, num_words) 

f.seek(0,2) में, 2from_what तर्क है:

यहाँ एक संभव ठीक है। from_what फ़ाइल की शुरुआत से 0 उपायों का मान, 1 वर्तमान फ़ाइल स्थिति का उपयोग करता है, और 2 फ़ाइल के संदर्भ को संदर्भ बिंदु के रूप में उपयोग करता है। संदर्भ बिंदु के रूप में फ़ाइल की शुरुआत का उपयोग करते हुए from_what को छोड़ा जा सकता है और 0 पर डिफ़ॉल्ट हो सकता है।

+0

का उपयोग कर रहा हूं क्योंकि 'एफ.एड()' ईओएफ को पढ़ता है, मूल * चाहिए * काम करना चाहिए: सी मानक पढ़ने के लिए लिखने के तरीके से स्विचिंग को स्विच करने की इजाजत देता है अगर ईएफओ पढ़ता है। यदि यह ठीक करता है, तो इसका मतलब है कि सी लाइब्रेरी (कुछ कंपाइलर्स और/या कुछ संस्करणों) पर विंडोज़ यह गलत हो जाता है। – torek

+0

@btoueg - धन्यवाद यह काम कर रहा है। मैंने इसे कई बार कोशिश की और चढ़ाई 'test2 words.txt' फ़ाइल को काम करने और बढ़ती रहती है। मैंने बस 'सेक()' के बारे में पाइथन दस्तावेज़ों को देखने का प्रयास किया, लेकिन मैं पूरी तरह से 'f.seek (0,2) 'नहीं समझ पाया। मैं समझता हूं कि पहला तर्क '0' प्रभावी रूप से फ़ाइल की शुरुआत में रिवाइंड करता है, लेकिन '2' क्या कर रहा है? –

+1

मैंने जवाब संपादित किया है। अधिक जानकारी के लिए, उस उत्तर की जांच करें जिसका मैं जिक्र कर रहा हूं। –

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