Filedialog tkinter modifier mot.
Résolu/Fermé
mister431
Messages postés
56
Date d'inscription
jeudi 19 novembre 2020
Statut
Membre
Dernière intervention
24 juin 2022
-
Modifié le 19 nov. 2020 à 11:02
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 - 20 nov. 2020 à 17:07
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 - 20 nov. 2020 à 17:07
A voir également:
- Tkinter filedialog
- Tkinter canvas rotate - Forum Python
- Tableau tkinter - Forum Python
- Morpion python tkinter - Forum Python
- Tkinter rotate image - Forum Python
- Tkinter mac os ✓ - Forum Python
23 réponses
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
Modifié le 19 nov. 2020 à 10:33
Modifié le 19 nov. 2020 à 10:33
Bonjour,
L'indentation étant importante en Python, merci de re poster ton code complet avec les balises de code
mode d'emploi:
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Visuellement, ça doit ressembler à ceci :
L'indentation étant importante en Python, merci de re poster ton code complet avec les balises de code
mode d'emploi:
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Visuellement, ça doit ressembler à ceci :
def test(): print('test') test()
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
19 nov. 2020 à 10:53
19 nov. 2020 à 10:53
Raté:
tu vois bien que visuellement, ton code ne ressemble pas du tout à l'exemple que je t'ai donné !
(couleurs, indentations, ...)
il faut faire exactement ce qui est dit dans le mode d'emploi dont je te donne le lien !
tu vois bien que visuellement, ton code ne ressemble pas du tout à l'exemple que je t'ai donné !
(couleurs, indentations, ...)
il faut faire exactement ce qui est dit dans le mode d'emploi dont je te donne le lien !
mister431
Messages postés
56
Date d'inscription
jeudi 19 novembre 2020
Statut
Membre
Dernière intervention
24 juin 2022
19 nov. 2020 à 11:01
19 nov. 2020 à 11:01
import tkinter from tkinter import * from tkinter import filedialog from pathlib import PureWindowsPath def show_about(): about_window = tkinter.Toplevel(window) about_window.title("Information") lb = tkinter.Label(about_window, text="Cette application a été crée par Toute utilisation non autorisé est un délit et punis, le logiciel est proteger par 'article L. 113-1 du Code de la propriété intellectuelle et article L112-2,\n les œuvres encadrées par la protection accordée par le droit d’auteur, parmi lesquelles on compte les logiciels ") lb.pack() #def 2 def show_about1(): about1_window = tkinter.Toplevel(window) about1_window.title("Help") lb = tkinter.Label(about1_window, text=" Si Erreur Réinstaller l'application, sinon contacter au ") lb.pack() def cherche(): cherche_file = filedialog.askopenfilename(initialdir="/Users/", title="Ouvrir txt", filetypes=(("Text Files,", "*.txt"),)) cherche_file = open(cherche_file, 'r') ia = cherche_file.read() my_text.insert(END, ia) def sauvegarder(): cherche_file = filedialog.askopenfilename(initialdir="/Users/", title="Ouvrir txt",filetypes=(("Text Files,", "*.txt"),)) cherche_file = open(cherche_file, 'w') cherche_file.write(my_text. get(1.0, END)) def ZRC(): Directory = filedialog.askopenfilename(initialdir=r"C:\Desktop", title="Ouvrir", filetypes=(("Text Files", "*.txt"), ("Python Files", "*.py"), ("all files", "*.*"))) name = PureWindowsPath(Directory).name file = open(name, "r") print(name) lignes = file.readlines() lignes[2] = "test \n" name = name.replace("maman", "papa") file = open(name, "w") file.writelines(lignes) file.close() window = tkinter.Tk() window.title("test") window.geometry("1080x720") window.minsize(480, 360) window.positionfrom("user") label_welcome = tkinter.Label(window, text="Version 1.0", font=("Arial", 30)) label_welcome.pack() #Exporter et importer mainmenu = tkinter.Menu(window) first_menu = tkinter.Menu(mainmenu, tearoff=0) first_menu.add_command(label='Importer', command=cherche) my_text = Text(window, width=40, height=30, font=("Helvetica", 16)) my_text.pack(pady=20) first_menu.add_command(label='Sauvegarder', command=sauvegarder) first_menu.add_command(label="Quitter", command=window.quit) second_menu = tkinter.Menu(mainmenu, tearoff= 0) second_menu.add_command(label="Information", command=show_about) second_menu.add_command(label="Help", command=show_about1) tree_menu = tkinter.Menu(mainmenu, tearoff=0) tree_menu.add_command(label="ZRC", command=ZRC) mainmenu.add_cascade(label="Fichier", menu=first_menu) mainmenu.add_cascade(label="Autre", menu=second_menu) mainmenu.add_cascade(label="Exporter", menu=tree_menu) window.config(menu=mainmenu) window.mainloop()
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
19 nov. 2020 à 11:12
19 nov. 2020 à 11:12
Aaaah, c'est mieux
Par contre il manque des indentations:
c'est plutot comme ça :
Et c'est quoi le message d'erreur, exactement ?
Par contre il manque des indentations:
def sauvegarder(): cherche_file = filedialog.askopenfilename(initialdir="/Users/", title="Ouvrir txt",filetypes=(("Text Files,", "*.txt"),)) cherche_file = open(cherche_file, 'w') cherche_file.write(my_text. get(1.0, END))
c'est plutot comme ça :
def sauvegarder(): cherche_file = filedialog.askopenfilename(initialdir="/Users/", title="Ouvrir txt",filetypes= (("Text Files,", "*.txt"),)) cherche_file = open(cherche_file, 'w') cherche_file.write(my_text. get(1.0, END))
Et c'est quoi le message d'erreur, exactement ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
mister431
Messages postés
56
Date d'inscription
jeudi 19 novembre 2020
Statut
Membre
Dernière intervention
24 juin 2022
19 nov. 2020 à 11:17
19 nov. 2020 à 11:17
Merci beaucoup ^^ et voici le message d'érreur :
Exception in Tkinter callback Traceback (most recent call last): File "C:\Users\****\AppData\Local\Programs\Python\Python39\lib\tkinter\__init__.py", [https://www.commentcamarche.net/download/telecharger-34098305-line line] 1885, in __call__ return self.func(*args) File "C:\Users\****\PycharmProjects\FREDproject\fenetre.py", line 38, in ZRC file = open(name, "r") FileNotFoundError: [Errno 2] No such file or directory: '13915 (5) - Copie.txt'
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
Modifié le 19 nov. 2020 à 13:28
Modifié le 19 nov. 2020 à 13:28
on ouvre un fichier dont le nom et le chemin sont dans la variable name:
Apparemment, name est égal à : '13915 (5) - Copie.txt' :
FileNotFoundError: [Errno 2] No such file or directory: '13915 (5) - Copie.txt'
(fichier non trouvé pas de fichier ou de répertoire '13915 (5) - Copie.txt')
Ca m'étonnerais que tu aie un nom de chemin+fichier nommé comme ça comme ça sur ton pc ....
Chez moi ca ressemble plutot à ça:
'C:\Phil\dev\python\copie.txt'
file = open(name, "r")
Apparemment, name est égal à : '13915 (5) - Copie.txt' :
FileNotFoundError: [Errno 2] No such file or directory: '13915 (5) - Copie.txt'
(fichier non trouvé pas de fichier ou de répertoire '13915 (5) - Copie.txt')
Ca m'étonnerais que tu aie un nom de chemin+fichier nommé comme ça comme ça sur ton pc ....
Chez moi ca ressemble plutot à ça:
'C:\Phil\dev\python\copie.txt'
mister431
Messages postés
56
Date d'inscription
jeudi 19 novembre 2020
Statut
Membre
Dernière intervention
24 juin 2022
19 nov. 2020 à 14:04
19 nov. 2020 à 14:04
Merci pour ta réponse mais si mon dossier s'appelle bien comme sa "13915 (5) - Copie.txt" surtout que je l'es sélectionner avec filedialog.askopenfilename donc je ne peut pas me tromper ^^ mais j'ai remarquer aussi que cela ne crée pas le chemin et j'essaie de le regler mais je n'y arrive pas je crois qu'il me manque une ligne de code mais je n'arrive pas a la trouver sur internet.
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
Modifié le 19 nov. 2020 à 14:18
Modifié le 19 nov. 2020 à 14:18
"dossier s'appelle bien comme sa "13915 (5) - Copie.txt"
Ce n'est pas le dossier en fait, c'est le fichier qui s'appelle "13915 (5) - Copie.txt"
Moi, quand je vais chercher un fichier à ouvrir dans un dossier, je fais comme ça:
et dans file_name, j'ai bien le chemin et le nom: 'C:\Phil\dev\python\copie.txt'
donc
Je pense que tu n'as pas besoin de PureWindowsPath(Directory).name, c'est ça qui met le bazar....
en fait, il te te manque pas de lignes, il y en a plutot en trop
Ce n'est pas le dossier en fait, c'est le fichier qui s'appelle "13915 (5) - Copie.txt"
Moi, quand je vais chercher un fichier à ouvrir dans un dossier, je fais comme ça:
file_name = askopenfilename(initialdir ="/Users/",filetypes =(("Text File", "*.txt"),("All Files","*.*")),title = "Selectionner fichier txt")
et dans file_name, j'ai bien le chemin et le nom: 'C:\Phil\dev\python\copie.txt'
donc
file = open(file_name, "r")ouvre mon fichier
Je pense que tu n'as pas besoin de PureWindowsPath(Directory).name, c'est ça qui met le bazar....
en fait, il te te manque pas de lignes, il y en a plutot en trop
mister431
Messages postés
56
Date d'inscription
jeudi 19 novembre 2020
Statut
Membre
Dernière intervention
24 juin 2022
19 nov. 2020 à 14:17
19 nov. 2020 à 14:17
Merci beaucoup
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
19 nov. 2020 à 14:20
19 nov. 2020 à 14:20
dis moi si ca va mieux comme ça ...
juste askopenfilename et tout de suite après file = open(
juste askopenfilename et tout de suite après file = open(
mister431
Messages postés
56
Date d'inscription
jeudi 19 novembre 2020
Statut
Membre
Dernière intervention
24 juin 2022
19 nov. 2020 à 14:28
19 nov. 2020 à 14:28
Oui oui sa fonctionner et j'ai réussir a supprimer la ligne 3 de mon dossier ^^
mister431
Messages postés
56
Date d'inscription
jeudi 19 novembre 2020
Statut
Membre
Dernière intervention
24 juin 2022
19 nov. 2020 à 14:39
19 nov. 2020 à 14:39
J'ai compris d'ou viens le problème sa viens du codage lignes=[2] etc... mais je comprend pas pourquoi sa supprime tout le contenue de mon fichier... mais je dois vraiment tout supprimer ses lignes d'un coup et ensuite que mon programme fasse des remplacement peut tu m'aider a régler se problème ?
mister431
Messages postés
56
Date d'inscription
jeudi 19 novembre 2020
Statut
Membre
Dernière intervention
24 juin 2022
Modifié le 19 nov. 2020 à 14:32
Modifié le 19 nov. 2020 à 14:32
Je pense avoir encore avoir un petit problème j'ai maintenant fait ce si comme codage et je ne comprend pas pourquoi tout mon dossser devient vide je ne sais pas comment regler se problème.
def ZRC(): Directory = filedialog.askopenfilename(initialdir=r"C:\Desktop", title="Ouvrir", filetypes=(("Text Files", "*.txt"), ("Python Files", "*.py"), ("all files", "*.*"))) file = open(Directory, "r") lignes = file.readlines() lignes[2] = " \n" lignes[3] = " \n" lignes[6] = " \n" lignes[7] = " \n" lignes[8] = " \n" lignes[9] = " \n" lignes[10] = " \n" lignes[11] = " \n" lignes[12] = " \n" lignes = file.read() lignes = lignes.replace("[ENTETE]", "TI") lignes = lignes.replace("TYPE = LIVRAISON", "Réception") lignes = lignes.replace("NO BDL =", "Z") lignes = lignes.replace("DAT BDL", "ZRC") lignes = lignes.replace("DAT LIV =", " ") lignes = lignes.replace("[LIGNES]", "LI;ARTICLE") lignes = lignes.replace("REF FOU", "BRA") lignes = lignes.replace("QTE =", " ") lignes = lignes.replace("PA BRUT", " ") lignes = lignes.replace("REMISE", " ") lignes = lignes.replace("PV TTC", " ") lignes = lignes.replace("TVA", " ") lignes = lignes.replace("LIBELLE =", "A01D;") lignes = lignes.replace("GENCOD = ", "FAUX") file = open(Directory, "w") file.writelines(lignes) file.close()
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
Modifié le 19 nov. 2020 à 14:57
Modifié le 19 nov. 2020 à 14:57
Ah, ce n'est pas clair dans ta tête ces notions de dossiers et de fichiers !!
Un dossier, c'est un répertoire, comme 'c:\Phil\dev\'
C'est le fichier qui se vide !
Déjà, ca ne change pas grand chose, mais remplace donc le nom Directory par nom_fichier, car directory, en anglais, = dossier ou répertoire, c'est un fichier que l'on sélectionne
Ensuite, voila ce que fait ton code actuellement:
ouvrir le fichier en lecture
lire tout le fichier d'un coup avec file.readlines
modifier des lignes
lire une seule ligne avec file.read()
remplacer des trucs
ouvrir à nouveau le fichier mais en écriture, sans l'avoir fermé
y écrire le contenu de lignes
fermer le fichier
C'est un peu le bazar, non ?
Finalement, que veux tu faire exactement ?
Lire le fichier, remplacer des trucs et le sauvegarder comme ça avec le meme nom ?
Je te donne une méthode plus sure:
ouvrir temporaire.txt en écriture
ouvrir ton fichier en lecture
lire les lignes de ton fichier et y remplacer les textes
écrire les lignes modifiées dans temporaire.txt
fermer temporaire et ton fichier
détruire ton fichier
renommer temporaire .txt avec le nom de ton fichier
et là, il ne reste plus que ton fichier modifié...
Un dossier, c'est un répertoire, comme 'c:\Phil\dev\'
C'est le fichier qui se vide !
Déjà, ca ne change pas grand chose, mais remplace donc le nom Directory par nom_fichier, car directory, en anglais, = dossier ou répertoire, c'est un fichier que l'on sélectionne
Ensuite, voila ce que fait ton code actuellement:
ouvrir le fichier en lecture
lire tout le fichier d'un coup avec file.readlines
modifier des lignes
lire une seule ligne avec file.read()
remplacer des trucs
ouvrir à nouveau le fichier mais en écriture, sans l'avoir fermé
y écrire le contenu de lignes
fermer le fichier
C'est un peu le bazar, non ?
Finalement, que veux tu faire exactement ?
Lire le fichier, remplacer des trucs et le sauvegarder comme ça avec le meme nom ?
Je te donne une méthode plus sure:
ouvrir temporaire.txt en écriture
ouvrir ton fichier en lecture
lire les lignes de ton fichier et y remplacer les textes
écrire les lignes modifiées dans temporaire.txt
fermer temporaire et ton fichier
détruire ton fichier
renommer temporaire .txt avec le nom de ton fichier
et là, il ne reste plus que ton fichier modifié...
mister431
Messages postés
56
Date d'inscription
jeudi 19 novembre 2020
Statut
Membre
Dernière intervention
24 juin 2022
Modifié le 19 nov. 2020 à 15:09
Modifié le 19 nov. 2020 à 15:09
Mon objectif est un exercice que je dois faire pour ma formation.
Je dois supprimer la ligne 3 et 4 puis 7 à 13 puis encore ensuite je dois remplacer tout ses mot dans le Fichier exemple :
[ENTETE] (il doit devenir TI)
blabla
tu dois supprimer cette ligne ( je dois supprimer)
tu dois supprimer cette ligne (je dois supprimer)
TYPE = LIVRAISON (doit devenir Réception)
ETC...
puis sauvegarder le fichier
Je dois supprimer la ligne 3 et 4 puis 7 à 13 puis encore ensuite je dois remplacer tout ses mot dans le Fichier exemple :
[ENTETE] (il doit devenir TI)
blabla
tu dois supprimer cette ligne ( je dois supprimer)
tu dois supprimer cette ligne (je dois supprimer)
TYPE = LIVRAISON (doit devenir Réception)
ETC...
puis sauvegarder le fichier
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
19 nov. 2020 à 15:09
19 nov. 2020 à 15:09
Pas de problème, mais la méthode pour ne pas vider ton fichier, c'est celle que je te décris à la fin de mon message ....
mister431
Messages postés
56
Date d'inscription
jeudi 19 novembre 2020
Statut
Membre
Dernière intervention
24 juin 2022
19 nov. 2020 à 15:15
19 nov. 2020 à 15:15
A Vrai dire je ne comprend pas comment tu a fait Phil es ce que tu peut me faire un exemple s'il vous plait ?
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
Modifié le 19 nov. 2020 à 15:28
Modifié le 19 nov. 2020 à 15:28
Je fais comme ça:
import os fi = open(mon_fichier, 'r') fo = open('tempo.txt','w') for ligne in fi: if('[ENTETE]' in ligne): ligne.replace('[ENTETE]', 'TI') fo.write(ligne) fi.close() fo.close() os.remove(mon_fichier) os.rename('tempo.txt', mon_fichier)
mister431
Messages postés
56
Date d'inscription
jeudi 19 novembre 2020
Statut
Membre
Dernière intervention
24 juin 2022
Modifié le 19 nov. 2020 à 15:36
Modifié le 19 nov. 2020 à 15:36
Merci pour ta réponse rapide mais je sais pas pourquoi personnellement ton code ne marche pas mais je reste bloquer faut que en une seul def:() je dois supprimer les lignes et modifier les mot
import os fi = open("13915 (5).txt", 'r') fo = open('tempo.txt','w') for ligne in fi: if('[ENTETE]' in ligne): ligne.replace('[ENTETE]', 'TI') fo.write(ligne) fi.close() fo.close() os.remove("13915 (5).txt") os.rename('tempo.txt', "13915 (5).txt")
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
Modifié le 19 nov. 2020 à 15:39
Modifié le 19 nov. 2020 à 15:39
tu n'as pas mis les balises de code...
mon code ne marche pas ?
chez moi, si
tu as un message d'erreur ? et lequel ?
fi = open("13915 (5).txt", 'r') : tu n'as pas oublié le chemin devant le nom de fichier ?
genre 'C:\\phil\\dev\\13915(5).txt' ???
mon code ne marche pas ?
chez moi, si
tu as un message d'erreur ? et lequel ?
fi = open("13915 (5).txt", 'r') : tu n'as pas oublié le chemin devant le nom de fichier ?
genre 'C:\\phil\\dev\\13915(5).txt' ???
mister431
Messages postés
56
Date d'inscription
jeudi 19 novembre 2020
Statut
Membre
Dernière intervention
24 juin 2022
19 nov. 2020 à 15:45
19 nov. 2020 à 15:45
Je l'est mi dans le meme dossier que mon code donc il le détecte automatiquement du temps que je le met le meme dossier et le nom(j'utilise pychram comme support)
je n'est aucune erreur juste il ne se passe rien et si je met le chemin
", line 3
fi = open("C:\Users\Paul\PycharmProjects\FREDproject\Nouveau dossier\test.txt", 'r')
^
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape
je n'est aucune erreur juste il ne se passe rien et si je met le chemin
", line 3
fi = open("C:\Users\Paul\PycharmProjects\FREDproject\Nouveau dossier\test.txt", 'r')
^
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
19 nov. 2020 à 15:47
19 nov. 2020 à 15:47
normal, le chemin codé en dur, c'est comme ça:
C:\\Phil
ou bien
alors C:/Phil
C:\\Phil
ou bien
alors C:/Phil
mister431
Messages postés
56
Date d'inscription
jeudi 19 novembre 2020
Statut
Membre
Dernière intervention
24 juin 2022
19 nov. 2020 à 15:52
19 nov. 2020 à 15:52
Nan je confirme que c'est comme sa mais bon je vais utilise mes file dialog
mister431
Messages postés
56
Date d'inscription
jeudi 19 novembre 2020
Statut
Membre
Dernière intervention
24 juin 2022
Modifié le 19 nov. 2020 à 15:56
Modifié le 19 nov. 2020 à 15:56
Avec file dialog cela conftionne mais dans le dossier tempo seulement mon chemin est écrit dedans et une erreur apparait
14, in <module> fi.close() AttributeError: 'str' object has no attribute 'close'
mister431
Messages postés
56
Date d'inscription
jeudi 19 novembre 2020
Statut
Membre
Dernière intervention
24 juin 2022
19 nov. 2020 à 16:06
19 nov. 2020 à 16:06
En tout cas ton code ne m'aide pas ^^" mon code entre guillement fonctionne :
car si je supprime pas les lignes les mot son remplacer...
et si seulement je supprime les ligne elles ont supprimer.
mais si je fait replace + supprimer les lignes tout le dossier se supprime
car si je supprime pas les lignes les mot son remplacer...
et si seulement je supprime les ligne elles ont supprimer.
mais si je fait replace + supprimer les lignes tout le dossier se supprime
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
19 nov. 2020 à 16:06
19 nov. 2020 à 16:06
ben oui, tu as surement écrit fi = askopenfilename
c'est fichier = askopenfilename
fi = open(fichier, 'r')
fi.close()
c'est fichier = askopenfilename
fi = open(fichier, 'r')
fi.close()
mister431
Messages postés
56
Date d'inscription
jeudi 19 novembre 2020
Statut
Membre
Dernière intervention
24 juin 2022
19 nov. 2020 à 16:11
19 nov. 2020 à 16:11
Je vois mais es ce que tu pourrais m'aider a supprimer les ligne et même faire le remplacement je continuerais ton code intéressant après ^^
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
Modifié le 19 nov. 2020 à 16:12
Modifié le 19 nov. 2020 à 16:12
je te redonnes ce qui marche chez moi:
le fichier test.txt contient ceci:
toto
[ENTETE]
tagada
le code:
le fichier test.txt après exécution:
toto
TI
tagada
essaie juste ça pour voir ...
le fichier test.txt contient ceci:
toto
[ENTETE]
tagada
le code:
from tkinter.filedialog import askopenfilename import os def ZRC(): mon_fichier = askopenfilename(initialdir ="C:/Phil/dev/python",filetypes =(("Text File", "*.txt"),("All Files","*.*")),title = "Selectionner fichier txt") fi = open(mon_fichier, 'r') fo = open('tempo.txt','w') for ligne in fi: if('[ENTETE]' in ligne): print(ligne) ligne = ligne.replace('[ENTETE]', 'TI') fo.write(ligne) fi.close() fo.close() os.remove(mon_fichier) os.rename('tempo.txt', mon_fichier) ZRC() input('appuyer sur entrée ...')
le fichier test.txt après exécution:
toto
TI
tagada
essaie juste ça pour voir ...
mister431
Messages postés
56
Date d'inscription
jeudi 19 novembre 2020
Statut
Membre
Dernière intervention
24 juin 2022
19 nov. 2020 à 16:14
19 nov. 2020 à 16:14
Merci beaucoup ^^ mais maintenant il faut que fasse supprimer lignes en même temps que sa
exemple
toto
ENTETE
tagada
erreur
erreur
ENTETE
sans que sa supprime tout l'interrieur ^^ si tu pouvais m'aider ^^
exemple
toto
ENTETE
tagada
erreur
erreur
ENTETE
sans que sa supprime tout l'interrieur ^^ si tu pouvais m'aider ^^
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
19 nov. 2020 à 16:14
19 nov. 2020 à 16:14
il faut commencer petit puis compliquer ensuite
déjà, dis-moi si mon dernier code avec un fichier de test comme je l'ai fait fonctionne ...
déjà, dis-moi si mon dernier code avec un fichier de test comme je l'ai fait fonctionne ...
mister431
Messages postés
56
Date d'inscription
jeudi 19 novembre 2020
Statut
Membre
Dernière intervention
24 juin 2022
Modifié le 19 nov. 2020 à 16:22
Modifié le 19 nov. 2020 à 16:22
Oui il fonctionne mais ensuite j'ai rajouter la suite :
mais bizarrement il fait le TI mais refuse de faire la suite il ignore les autres lignes.
from tkinter.filedialog import askopenfilename import os def ZRC(): mon_fichier = askopenfilename(initialdir ="C:/Phil/dev/python",filetypes =(("Text File", "*.txt"),("All Files","*.*")),title = "Selectionner fichier txt") fi = open(mon_fichier, 'r') fo = open('tempo.txt','w') for lignes in fi: if('[ENTETE]' in lignes): lignes = lignes.replace('[ENTETE]', 'TI') lignes = lignes.replace("TYPE = LIVRAISON", "Réception") lignes = lignes.replace("NO BDL =", "Z") lignes = lignes.replace("DAT BDL", "ZRC") lignes = lignes.replace("DAT LIV =", " ") lignes = lignes.replace("[LIGNES]", "LI;ARTICLE") lignes = lignes.replace("REF FOU", "BRA") lignes = lignes.replace("QTE =", " ") lignes = lignes.replace("PA BRUT", " ") lignes = lignes.replace("REMISE", " ") lignes = lignes.replace("PV TTC", " ") lignes = lignes.replace("TVA", " ") lignes = lignes.replace("LIBELLE =", "A01D;") lignes = lignes.replace("GENCOD = ", "FAUX") print(lignes) fo.write(lignes) fi.close() fo.close() os.remove(mon_fichier) os.rename('tempo.txt', mon_fichier) ZRC() input('appuyer sur entrée ...')
mais bizarrement il fait le TI mais refuse de faire la suite il ignore les autres lignes.
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
19 nov. 2020 à 16:31
19 nov. 2020 à 16:31
Réfléchis a ce que tu écris:
tu ne fait les remplacements que si la ligne lue dans le fichier contient [ENTETE]
donc forcement, ca ne marche que si il y a [ENTETE] dans la ligne !
Je te rappelle que la boucle for sert a lire ligne par ligne
et donc ta variable lignes contient une seule ligne à chaque tour de boucle ...
if('[ENTETE]' in lignes): lignes = lignes.replace('[ENTETE]', 'TI') lignes = lignes.replace("TYPE = LIVRAISON", "Réception")
tu ne fait les remplacements que si la ligne lue dans le fichier contient [ENTETE]
donc forcement, ca ne marche que si il y a [ENTETE] dans la ligne !
Je te rappelle que la boucle for sert a lire ligne par ligne
et donc ta variable lignes contient une seule ligne à chaque tour de boucle ...
mister431
Messages postés
56
Date d'inscription
jeudi 19 novembre 2020
Statut
Membre
Dernière intervention
24 juin 2022
19 nov. 2020 à 16:37
19 nov. 2020 à 16:37
oui je viens de remarquer cette erreur donc j'ai ce cis actuellement :
je ne sais pas si c'est juste mais je pense qu'il me manque des chose
je ne sais pas si c'est juste mais je pense qu'il me manque des chose
def ZRC(): mon_fichier = askopenfilename(initialdir ="C:/Phil/dev/python",filetypes =(("Text File", "*.txt"),("All Files","*.*")),title = "Selectionner fichier txt") fi = open(mon_fichier, 'r') fo = open('tempo.txt','w') for lignes in fi: if('[ENTETE]' in lignes): if ("TYPE = LIVRAISON" in "Réception"): if ("NO BDL ="in "Z"): if lignes.replace("DAT BDL" in "ZRC"): if("DAT LIV ="in " "): if("[LIGNES]"in "LI;ARTICLE"): if("REF FOU"in "BRA"): if("QTE ="in " "): if("PA BRUT"in " "): if("REMISE"in " "): if("PV TTC"in " "): if("TVA"in " "): if("LIBELLE ="in "A01D;"): if("GENCOD = "in "FAUX"): print(lignes) fo.write(lignes) fi.close() fo.close() os.remove(mon_fichier) os.rename('tempo.txt', mon_fichier) ZRC() input('appuyer sur entrée ...')
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
Modifié le 19 nov. 2020 à 16:42
Modifié le 19 nov. 2020 à 16:42
il manque les replace()
et tu décales les if, donc ils dépendent tous les uns des autres !
fais donc comme ça:
et tu répètes le test au même niveau mais pour les autres chaines
et tu décales les if, donc ils dépendent tous les uns des autres !
fais donc comme ça:
if('[ENTETE]' in lignes): lignes = lignes.replace('[ENTETE]', 'TI')
et tu répètes le test au même niveau mais pour les autres chaines
mister431
Messages postés
56
Date d'inscription
jeudi 19 novembre 2020
Statut
Membre
Dernière intervention
24 juin 2022
19 nov. 2020 à 16:54
19 nov. 2020 à 16:54
Parfait maintenant mon code marche il me manque plus que la dernière étape c'est de supprimer les lignes en question
imaginons la ligne 4 5 9 ^^
imaginons la ligne 4 5 9 ^^
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
Modifié le 19 nov. 2020 à 17:01
Modifié le 19 nov. 2020 à 17:01
je te laisse y réfléchir un peu
rappelle toi qu'on lit une ligne dans le fichier initial, on la modifie (ou pas) et on la copie
dans tempo
donc, supprimer une ligne, c'est tout simplement ne pas la recopier dans tempo
donc une fois identifiée la ligne, sauter le code
avec un if
rappelle toi qu'on lit une ligne dans le fichier initial, on la modifie (ou pas) et on la copie
dans tempo
donc, supprimer une ligne, c'est tout simplement ne pas la recopier dans tempo
donc une fois identifiée la ligne, sauter le code
fo.write(lignes)
avec un if
mister431
Messages postés
56
Date d'inscription
jeudi 19 novembre 2020
Statut
Membre
Dernière intervention
24 juin 2022
19 nov. 2020 à 17:11
19 nov. 2020 à 17:11
j'ai fait ce cis mais malheureusement je comprend pas pourquoi cela supprime tout ^^
for lignes in fi: if ('[ENTETE]' in lignes): lignes = lignes.replace('[ENTETE]', 'TI') if ("TYPE = LIVRAISON" in lignes): lignes = lignes.replace("TYPE = LIVRAISON", "Reception") if ("NO BDL =" in lignes): lignes = lignes.replace("NO BDL =", "Z") if ("DAT BDL" in lignes): lignes = lignes.replace("DAT BDL" , "ZRC") if("DAT LIV ="in lignes): lignes = lignes.replace("DAT LIV =", " ") if("[LIGNES]"in lignes): lignes = lignes.replace("[LIGNES]", "LI;ARTICLE") if("REF FOU"in lignes): lignes = lignes.replace("REF FOU", "BRA") if("QTE ="in lignes): lignes = lignes.replace("QTE =", " ") if("PA BRUT"in lignes): lignes = lignes.replace("PA BRUT", " ") if("REMISE"in lignes): lignes = lignes.replace("REMISE", " ") if("PV TTC"in lignes): lignes = lignes.replace("PV TTC", " ") if("TVA"in lignes): lignes = lignes.replace("TVA", " ") if("LIBELLE ="in lignes): lignes = lignes.replace("LIBELLE =", "A01D;") if("GENCOD = "in lignes): lignes = lignes.replace("GENCOD = ", "FAUX") for lignes in fi : if ([2] in lignes): lignes.replace('.\n')