2013-10-09 14 views
6

Python/newbie di programmazione qui.Python - "IOError: [Errno 0] Errore". Che cos'è scatenare questo errore nel mio codice?

Ho uno script che dovrebbe aggiungere qualcosa a un file, ma sta generando un errore che non capisco e non è sicuro di come viene attivato.

Ecco il codice:

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) 

Ecco il contenuto del file 'test2 words.txt':

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

Ecco l'errore completo sto ottenendo:

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] 

Qualsiasi aiuto apprezzato Cheers Darren

+0

Sembra simile a http://stackoverflow.com/questions/11176724/python-file-operations, sei su Windows? –

+0

Sì, sto usando windows 7 –

risposta

7

Per rispondere al numero da Python file operations, quando si passa da lettura a scrittura su Windows, è necessario eseguire un'operazione fflush, fsetpos, fseek o riavvolgimento.

Ecco una possibile soluzione:

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 è l'argomento from_what. Un valoredelle misure 0 dall'inizio del file, 1 utilizza la posizione del file corrente e 2 utilizza la fine del file come punto di riferimento. from_what può essere omesso e il valore predefinito è 0, utilizzando l'inizio del file come punto di riferimento.

+0

Poiché 'f.read()' legge su EOF, l'originale * dovrebbe * funzionare: lo standard C consente di passare dalla modalità lettura a scrittura se lettura incontra EOF. Se questo risolve il problema, ciò implica la libreria C su (alcuni compilatori e/o alcune versioni di?) Windows si sbaglia. – torek

+0

@btoueg: grazie funziona. L'ho provato diverse volte e l'apeending continua a funzionare e cresce il file 'test2 words.txt'. Ho appena provato a guardare i documenti python su '.seek()', ma non riuscivo a capire completamente 'f.seek (0,2)'. Capisco che il primo argomento '0' riavvolge efficacemente all'inizio del file, ma cosa sta facendo il' 2'? –

+1

Ho modificato la risposta. Per maggiori dettagli, controlla la risposta a cui mi riferisco. –

Problemi correlati