Bonjour,
j'essai de modifier un txt en fonction de son contenu.
le txt peut être vide ou non...
si il est vide l'ajout d'une ligne doit pouvoir se faire.
si il est déjà rempli, je dois pouvoir vérifier le contenu, éventuellement modifier l'état d'une ligne et si toutes les lignes sont ok, éventuellement en ajouter une autre.
d'habitude j'ai pas de souci pour créer un txt et écrire dedans... mais les possibilités d'écriture/ajout/lecture ne me paraissent pas si compatibles que ça!
pour accéder au contenu d'un fichier les 3 lignes ci dessous marchent bien:
par contre pour la modifier au besoin... il faut que je passe en mode open "w" ou "a+"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 fichier_suivi_dt = open(r"chemin" + os.sep + str(dt_modifiee) + os.sep + "Suivi.txt", "r") self.liste_suivi_dt = fichier_suivi_dt.readlines() fichier_suivi_dt.close()
le code ci dessous me semble prometteur dans le sens ou deux open sont imbriqués (l'un en mode write et l'autre en mode lecture/ajout).
mais j'ai beau tourner les possibilités dans tous les sens... j'ai toujours une possibilité qui ne passe pas (soit je ne peux pas ajouter une ligne, soit je ne peux pas lire ou contrôler le contenu d'un fichier....
le code ci dessus est une bonne piste?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 def update(self, file_path, old, new): fh, abs_path = mkstemp() with open(fh,'w') as new_file: with open(file_path, "a+") as old_file: if any(new[1:10] in s for s in self.liste_suivi_dt): #self.liste_suivi_dt contient la liste du contenu de mon fichier old for line in old_file: new_file.write(line.replace(old, new)) copymode(file_path, abs_path) remove(file_path) move(abs_path, file_path) else: new_file.write(new) copymode(file_path, abs_path) remove(abs_path) move(abs_path, file_path)
merci!
Partager