2013-10-09 4 views
6

Python/Programmierer Neuling hier.Python - "IOError: [Errno 0] Fehler". Was löst diesen Fehler in meinem Code aus?

Ich habe ein Skript, das etwas an eine Datei anhängen sollte, aber es ist ein Fehler, den ich nicht verstehe und nicht sicher, wie es ausgelöst wird. Hier

ist der Code:

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) 

Hier ist der Inhalt des 'test2 words.txt' file:

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

Hier wird der vollständige Fehler Ich erhalte:

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] 

Irgendwelche Hilfe geschätzt Cheers Darren

+0

Sieht ähnlich aus http://StackOverflow.com/Questions/11176724/Python-File-Operations, sind Sie unter Windows? –

+0

Ja, ich benutze Windows 7 –

Antwort

7

Bei der Antwort aus Python file operations muss beim Wechsel zwischen Lesen und Schreiben unter Windows eine Interventionsoperation fflush, fsetpos, fseek oder rewind ausgeführt werden. Hier

ist eine mögliche Lösung:

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) 

In f.seek(0,2), 2 ist das from_what Argument. Ein from_what Wert von 0 misst vom Anfang der Datei, 1 verwendet die aktuelle Dateiposition und 2 verwendet das Ende der Datei als Referenzpunkt. from_what kann weggelassen werden und ist standardmäßig 0, wobei der Anfang der Datei als Referenzpunkt verwendet wird.

+0

Da 'f.read()' in EOF liest, sollte das Original * funktionieren *: Der C-Standard erlaubt das Umschalten vom Lese- in den Schreibmodus, wenn EOF gelesen wird. Wenn dies das Problem behebt, bedeutet das, dass die C-Bibliothek aktiviert ist (einige Compiler und/oder einige Versionen von?). – torek

+0

@btoeg - Danke, das funktioniert. Ich habe es mehrere Male ausprobiert und das Apeending funktioniert weiter und vergrößert die 'test2 words.txt' Datei. Ich habe gerade versucht, die Python-Dokumentation über '.seek()' zu betrachten, aber ich konnte 'f.seek (0,2)' nicht vollständig herausfinden. Ich verstehe, dass das erste Argument "0" effektiv zum Anfang der Datei zurückspult, aber was macht die "2"? –

+1

Ich habe die Antwort bearbeitet. Weitere Informationen finden Sie in der Antwort, auf die ich mich beziehe. –

Verwandte Themen