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 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 - 20 nov. 2020 à 17:07
Bonjour,

j'ai crée un programme de texte sauvegarder, ouvrir, fermer etc...

mais je veut crée une commande qui permet de lire le texte et remplacer par exemple maman par papa (un txt) avec filedialog mais cela me crée des erreurs.


voici une partie de mon programme si vous souhaiter des informations complémentaire dite le moi.



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()



Configuration: Windows / Firefox 82.0

23 réponses

Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
Modifié le 19 nov. 2020 à 17:17
if ([2] in lignes)


tu es sur que la ligne contient [2] ????

Et je t'ai dis dans mon message précédent que supprimer une ligne, c'est tout simplement ne pas la recopier dans tempo, donc ne pas faire
fo.write(lignes)


j'ai fait ce cis -> j'ai fait ceci
0
mister431 Messages postés 56 Date d'inscription jeudi 19 novembre 2020 Statut Membre Dernière intervention 24 juin 2022
19 nov. 2020 à 17:19
Je vois se que tu veut dire ^^ mais vraiment je ne vois pas du tout comment faire desoler ^^"
es ce que tu peut donner un exemple ?
0
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 à 17:27
nan la ligne ne contient pas [2] je veut juste supprimer la numéro 3 (car la ligne 1 = 0 2= 1 etc...)
0
mister431 Messages postés 56 Date d'inscription jeudi 19 novembre 2020 Statut Membre Dernière intervention 24 juin 2022
19 nov. 2020 à 17:43
je viens de comprend j'ai ceci :

cela supprime bien ma ligne numéro deux mais le problème cela me supprime aussi tout le reste

exemple :

ENTETE
fraise
papa
mama

sa devient :

TI
(le reste supprimer)

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')
        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")
        ligness = fi.readlines()
        ligness[2] = " .\n"
0
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
20 nov. 2020 à 10:33
Bonjour,

"nan la ligne ne contient pas [2]" : c'est pas nan, c'est non...
ben alors si elle ne contient pas [2], pourquoi testes-tu son contenu :
if ([2] in lignes):


for lignes in fi:

ici, la variable s'appelle lignes

ligness = fi.readlines()

ici, la variable s'appelle ligness (avec 2 s) ?

de plus tu n'as pas vraiment compris la mécanique:
avec la boucle for, on lit ligne par ligne
avec readlines, on lit tout le contenu du fichier
et en plus, tu mets ça dans la boucle for qui est déjà en train de lire : quel cirque !

Et ça, ca fait quoi : ??????
ligness[2] = " .\n"


Moi, pour faire simple, je laisserais la fonction ZRC comme elle est (remplacement de texte)
ensuite, j'appellerais une autre fonction pour supprimer les lignes

Admettons que l'on veuille supprimer les lignes 2 et 3
même mécanique que ZRC:
on ouvre les fichiers tempo et mon_fichier
on lit avec une boucle for
dans la boucle on met un compteur pour compter les lignes
et si le compteur=2 ou compteur = 3, on ne l'écrit pas dans tempo
0
mister431 Messages postés 56 Date d'inscription jeudi 19 novembre 2020 Statut Membre Dernière intervention 24 juin 2022
20 nov. 2020 à 14:10
Bonjour, de base :

ligness[2] = " .\n"


devait supprimer ma ligne numéro 3 mais malheureusement elle supprime tout sauf TI sans aucune explication mais sans cette commande tout fonctionne.

enfaite des fois j'ai l'impression aussi vous ne comprenez pas se que je recherche
avec ZRC je veut remplacer des mot et supprimer une ligne qui met sert pas.

exemple :

ENTETE
Livraison = domicile
fjsdgfnig@gmail.com
toto = 13
argent : 13euro

la entete devient TI etc...

mais par exemple je veut que @gmail disparait car elle apparait tout le temps a la même ligne du texte mais je peut pas faire .replace sa serait tricher il faut que je la supprime et laisser le reste. voila
0
mister431 Messages postés 56 Date d'inscription jeudi 19 novembre 2020 Statut Membre Dernière intervention 24 juin 2022
20 nov. 2020 à 14:31
Bon merci de votre aide je vais conclure se post car il a été résolu en partie je vais refaire un post merci pour votre aide
0
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
Modifié le 20 nov. 2020 à 17:08
Il faut absolument que tu fasse comme je te l'indique, ca marche à coup sur, je l'ai testé

abandonne tes ligness[2] = " .\n"
et tes doubles lectures

moi, j'ai fait une fonction remplacer(), puis une fonction supprimer(), je les appelle l'une apres l'autre

et ca marche bien
0