Python reemplaza y sobrescribe en lugar de anexar

Tengo el siguiente código:

import re #open the xml file for reading: file = open('path/test.xml','r+') #convert to string: data = file.read() file.write(re.sub(r"ABC(\s+)(.*)",r"ABC\1\2",data)) file.close() 

donde me gustaría reemplazar el contenido antiguo que está en el archivo con el contenido nuevo. Sin embargo, cuando ejecuto mi código, se adjunta el archivo “test.xml”, es decir, tengo el contenido anterior seguido por el nuevo contenido “reemplazado”. ¿Qué puedo hacer para eliminar lo viejo y solo conservar lo nuevo?

Debe usar Truncate si desea hacerlo en su lugar. Reemplace: https://docs.python.org/3/library/os.html?highlight=truncate#os.truncate O use open(myfile, 'w') . Esto eliminará el archivo antiguo y creará uno nuevo.

AFAIK truncate no cambia el inodo, pero abrir (…, ‘w’) creará un nuevo inode. Pero en la mayoría de los casos esto no importa. … Lo probé ahora. Tanto open (…, ‘w’) como truncate () no cambian el número de inodo del archivo. (Probado dos veces: una vez con Ubuntu 12.04 NFS y una vez con ext4).

Por cierto, esto no está realmente relacionado con Python. El intérprete llama a la API de bajo nivel correspondiente. El método truncate() funciona de la misma manera en el lenguaje de progtwigción C: consulte http://man7.org/linux/man-pages/man2/truncate.2.html

Usando truncate() , la solución podría ser

 import re #open the xml file for reading: with open('path/test.xml','r+') as f: #convert to string: data = f.read() f.seek(0) f.write(re.sub(r"ABC(\s+)(.*)",r"ABC\1\2",data)) f.truncate() 
 file='path/test.xml' with open(file, 'w') as filetowrite: filetowrite.write('new content') filetowrite.close() 

Abra el archivo en el modo ‘w’, podrá reemplazar su texto actual, guardar el archivo con nuevos contenidos.

 import os#must import this library if os.path.exists('TwitterDB.csv'): os.remove('TwitterDB.csv') #this deletes the file else: print("The file does not exist")#add this to prevent errors 

Tuve un problema similar, y en lugar de sobrescribir mi archivo existente con los diferentes ‘modos’, simplemente eliminé el archivo antes de volver a usarlo, de modo que sería como si estuviera agregando un nuevo archivo en cada ejecución de mi código .