J'ai le code suivant:
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"<string>ABC</string>(\s+)<string>(.*)</string>",r"<xyz>ABC</xyz>\1<xyz>\2</xyz>",data))
file.close()
où je voudrais remplacer l'ancien contenu qui est dans le fichier avec le nouveau contenu. Cependant, lorsque j'exécute mon code, le fichier "test.xml" est ajouté, c'est-à-dire que l'ancien contenu est suivi du nouveau contenu "remplacé". Que puis-je faire pour supprimer les anciennes données et ne conserver que les nouvelles?
Vous devez utiliser truncate si vous voulez remplacer à la place: https://docs.python.org/3/library/os.html?highlight=truncate#os.truncate .__ Ou utilisez open(myfile, 'w')
. Cela supprimera l'ancien fichier et en créera un nouveau.
AFAIK truncate ne change pas l'inode, mais open (..., 'w') créera un nouvel inode. Mais dans la plupart des cas, cela n'a pas d'importance. ... Je l'ai testé maintenant. Open (..., 'w') et truncate () ne modifient pas le numéro d'inode du fichier. (Testé deux fois: une fois avec Ubuntu 12.04 NFS et une fois avec ext4).
En passant, cela n’est pas vraiment lié à Python. L'interpréteur appelle l'API de bas niveau correspondante. La méthode truncate()
fonctionne de la même manière dans le langage de programmation C: voir http://man7.org/linux/man-pages/man2/truncate.2.html
En utilisant truncate()
, la solution pourrait être
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"<string>ABC</string>(\s+)<string>(.*)</string>",r"<xyz>ABC</xyz>\1<xyz>\2</xyz>",data))
f.truncate()
file='path/test.xml'
with open(file, 'w') as filetowrite:
filetowrite.write('new content')
filetowrite.close()
Ouvrez le fichier en mode 'w', vous pourrez remplacer le texte actuel, enregistrez le fichier avec un nouveau contenu.
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
J'ai eu un problème similaire et au lieu d'écraser mon fichier existant en utilisant les différents «modes», je l'ai simplement supprimé avant de le réutiliser, afin que ce soit comme si j'y ajoutais un nouveau fichier à chaque exécution de mon code .