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.