Error “IOError: Error” en Python

Tengo un script que debería agregar algo a un archivo, pero está generando un error que no entiendo y no estoy seguro de cómo se está activando.

Aquí está el código:

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) 

Aquí está el contenido del archivo ‘test2 words.txt’:

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

Aquí está el error completo que estoy recibiendo:

 Traceback (most recent call last): File "D:\Magic Briefcase\My Python Scripts\Spin Scripts\synonyms\testing2.py", line 16, in  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] 

Al citar la respuesta de las operaciones de archivos de Python , al cambiar entre la lectura y la escritura en Windows, debe haber una operación intermedia de fflush, fsetpos, fseek o rebobinado.

Aquí hay una posible solución:

 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) 

En f.seek(0,2) , 2 es el argumento from_what . Un valor from_what de 0 mide desde el principio del archivo, 1 usa la posición actual del archivo y 2 usa el final del archivo como punto de referencia. from_what se puede omitir y el valor predeterminado es 0 , utilizando el principio del archivo como punto de referencia.