2013-10-09 226 views
6

Python /編程新手在這裏。Python - 「IOError:[Errno 0] Error」。在我的代碼中觸發這個錯誤是什麼?

我有一個腳本,應該將一些東西附加到文件中,但它是養我不理解和不知道它是如何被觸發的錯誤。

下面是代碼:

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' 文件的內容:

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

以下是完整的錯誤我得到:

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] 

任何幫助表示讚賞 乾杯 達倫

+0

類似於http://stackoverflow.com/questions/11176724/python-file-operations,是您在Windows? –

+0

是的,我使用Windows 7 –

回答

7

報價從Python file operations答案,閱讀之間的切換在Windows上書寫時,必須有一箇中間的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參數。從該文件的開頭0措施甲from_what值,1使用當前文件的位置,並2使用文件作爲參考點的端部。 from_what可以省略,默認爲0,使用文件的開頭作爲參考點。

+0

由於'f.read()'讀取到EOF,原*應*工作:C標準允許切換讀取如果讀遇到EOF寫模式。如果這確實解決了這個問題,那就意味着C庫(一些編譯器和/或某些版本的?)Windows會出錯。 – torek

+0

@btoueg - 謝謝你的工作。我嘗試了幾次,並且apeending繼續工作並且增長'test2 words.txt'文件。我只是試着看看關於'.seek()'的python文檔,但我無法完全弄清楚'f.seek(0,2)'。我知道第一個參數'0'有效地倒回到文件的開頭,但是'2'做了什麼? –

+1

我編輯了答案。欲瞭解更多詳情,請查看我所指的答案。 –

相關問題