IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

remplir variables depuis fichier .txt


Sujet :

Python

  1. #1
    Membre du Club
    Homme Profil pro
    team manager
    Inscrit en
    Juin 2015
    Messages
    191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : team manager
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2015
    Messages : 191
    Points : 67
    Points
    67
    Par défaut remplir variables depuis fichier .txt
    Bonjour à tous,

    Je fais un projet de répertoire téléphonique donc j'ai crée des frames d'entrées de données, je stocke dans une variable de type et quand l'entrée est validée je sauvegarde le tout dans un fichier .txt avec le bout de code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def ajtResult(ctc, ent1, ent2, ent3):
        nom = ent1.get()
        prenom = ent2.get()
        num = ent3.get()
        ctc[0].append(nom), ctc[1].append(prenom), ctc[2].append(num)
        rows = [[group[n] for group in ctc] for n in range(len(ctc[0]))]
        file = open("contacts.txt", "a")
        file.write("\n".join([repr(x) for x in rows]))
        file.close()
    Cette partie fonctionne

    Maintenant je veux coder la partie recherche et ouverture du programme quand on y revient, donc je veux recharger le contenu de mon fichier contacts.txt dans ma variable ctc et la je ne sais pas coment faire.

    Mon fichier contacts.txt contient les infos suivantes avec des doublons que je traiterai par la suite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ['dupond', 'jean', '123']['dupond', 'jean', '123']
    ['durand', 'roger', '456']['dupond', 'jean', '123']
    ['durand', 'roger', '456']
    ['dubord', 'gilles', '789']
    Est-ce que quelqu'un peut me mettre sur la voie ?

    Merci d'avance de votre aide.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par jchuillier2 Voir le message
    Est-ce que quelqu'un peut me mettre sur la voie ?
    Un fichier texte est une suite de lignes.
    Un enregistrement = une ligne, donc au lieu d'avoir sur la même ligne ['dupond', 'jean', '123']['dupond', 'jean', '123'], on a 2 lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ['dupond', 'jean', '123']
    ['dupond', 'jean', '123']
    Si possible de la forme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dupond, jean, 123
    dupond, jean, 123
    car une ligne est une chaîne de caractères: il est plus facile de passer de "dupond, jean, 123" à la liste ['dupond', 'jean', '123'] sans avoir à retirer crochets et guillemets.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par jchuillier2 Voir le message
    donc je veux recharger le contenu de mon fichier contacts.txt dans ma variable ctc et la je ne sais pas coment faire.

    Est-ce que quelqu'un peut me mettre sur la voie ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ouvrir fichier
    pour chaque ligne du fichier, faire
        extraction informations de la ligne pour obtenir nom, prénom, numéro
        ctc.append([nom, prenom, numero])
    fin pour
    fermer fichier
    Bien entendu ça le fait que si tu suis les conseils de wiztricks en n'écrivant dans le fichier que les informations sans fioriture avec une information par ligne.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    car une ligne est une chaîne de caractères: il est plus facile de passer de "dupond, jean, 123" à la liste ['dupond', 'jean', '123'] sans avoir à retirer crochets et guillemets.
    J'aurai pensé ça aussi dans un premier temps, mais il m'est revenu cette fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> eval("['dupond', 'jean', '123']")
    ['dupond', 'jean', '123']
    Préférer plutôt la fonction sécurisée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> ast.literal_eval("['dupond', 'jean', '123']")
    ['dupond', 'jean', '123']
    Dernière modification par Invité ; 22/02/2022 à 01h25.

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par LeNarvalo Voir le message
    J'aurai pensé ça aussi dans un premier temps, mais il m'est revenu cette fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> eval("['dupond', 'jean', '123']")
    ['dupond', 'jean', '123']
    Dans un forum professionnel, on évite de proposer "eval" (surtout pour évaluer des données externes)... peut être qu'on utilisera ast.literal_eval. Ceci dit pour de tels objets, les formats JSON (voire pickle) sont bien plus appropriés (mais le PO débute...).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Invité
    Invité(e)
    Par défaut
    Ah bon... Je peux savoir pourquoi ? Ca me paraît sacrément pratique. Je ne l'utilise jamais mais c'est plus parce que je ne retiens pas cette fonction.

    PS : Pi chui pas pro et loin de l'être donc j'ai droit de la proposer tant qu'il y a un pro pour me contrôler ? 😅

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par LeNarvalo Voir le message
    Ah bon... Je peux savoir pourquoi ? Ca me paraît sacrément pratique. Je ne l'utilise jamais mais c'est plus parce que je ne retiens pas cette fonction.
    Google est ton ami.

    Citation Envoyé par LeNarvalo Voir le message
    PS : Pi chui pas pro et loin de l'être donc j'ai droit de la proposer tant qu'il y a un pro pour me contrôler ? 😅
    On est là pour partager son expérience pas son ignorance et c'est lassant de devoir intervenir pour rectifier vos propos. SI vous n'êtes pas sûr de la pertinence de ce que vous avancez, pourquoi intervenir?

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #8
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par LeNarvalo Voir le message
    Ah bon... Je peux savoir pourquoi ?
    Parce que eval(truc) va exécuter "truc" comme si c'était une instruction Python. Et si "truc" est lu depuis un fichier externe c'est la porte ouverte à tout. Tu imagines si le fichier est modifié par un hackeur qui y met ses ordres à lui...?
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    On est là pour partager son expérience pas son ignorance et c'est lassant de devoir intervenir pour rectifier vos propos. SI vous n'êtes pas sûr de la pertinence de ce que vous avancez, pourquoi intervenir?
    Ah le voilà requinqué !
    Pour te tenir éveillé, je compte poursuivre mes interventions approximatives durant les 20 prochaines années.

    @Sve@r Ah oui effectivement ! Je n'avais pas pensé à ça. J'ai corrigé mon post.

  10. #10
    Membre du Club
    Homme Profil pro
    team manager
    Inscrit en
    Juin 2015
    Messages
    191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : team manager
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2015
    Messages : 191
    Points : 67
    Points
    67
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,



    Un fichier texte est une suite de lignes.
    Un enregistrement = une ligne, donc au lieu d'avoir sur la même ligne ['dupond', 'jean', '123']['dupond', 'jean', '123'], on a 2 lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ['dupond', 'jean', '123']
    ['dupond', 'jean', '123']
    Si possible de la forme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dupond, jean, 123
    dupond, jean, 123
    car une ligne est une chaîne de caractères: il est plus facile de passer de "dupond, jean, 123" à la liste ['dupond', 'jean', '123'] sans avoir à retirer crochets et guillemets.

    - W
    Ok pour ca, mais vu que je veux avoir une variable à 2 dimensions pour que ca contienne nom, prenom, num comment je fais pour ne pas avoir à utiliser les [] qui me permettent d'avoir les 2 dimensions ?

    Dans l'absolu si je fais 3 variables "normales" que j'appelle "nom", "prenom" et "num" je peux les additionner pour faire une ligne avant de l'enregistrer en mode append dans mon ficher texte ?

    Je galère sur la syntaxe qui est claire comme du pétrole dans lequel on a rajouté du toner....

    Voila mon code complet avec la fonction de recherche qui n'est pas en fonction (mais pour le moment je m'en fous.

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    from tkinter import *
    from datetime import *
    fenetre = Tk()
    ctc=[[],[],[]]
     
    Frame1 = Frame(fenetre, bg="red", borderwidth=1, relief=GROOVE)
    Frame1.grid(row = 0, column = 0, padx=5, pady=5)
     
    Frame2 = Frame(fenetre, bg="yellow", borderwidth=1, relief=GROOVE)
    Frame2.grid(row = 0, column = 2, padx=5, pady=5)
     
    Frame3 = Frame(fenetre) #frame d'entrée de données
     
    Frame4 = Frame(fenetre)
     
    def ajt():
        Frame3.grid(row = 1, column = 0)
        Label1 = Label(Frame3, text = "Informations du contact")
        Label1.grid(row = 0, column = 0, columnspan = 1)
        nomLabel = Label(Frame3, text = "Nom ? ")
        nomEntry = Entry(Frame3)
        nomLabel.grid(row = 1, column = 0)
        nomEntry.grid(row = 1, column = 1)
        nomEntry.focus()
        prenomLabel = Label(Frame3, text = "Prénom ? ")
        prenomEntry = Entry(Frame3)
        prenomLabel.grid(row = 2, column = 0)
        prenomEntry.grid(row = 2, column = 1)
        prenomEntry.focus()
        numLabel = Label(Frame3, text = "Numéro ? ")
        numEntry = Entry(Frame3)
        numLabel.grid(row = 3, column = 0)
        numEntry.grid(row = 3, column = 1)
        numEntry.focus()
        submitCommand = lambda event = None: ajtResult(ctc, nomEntry, prenomEntry, numEntry)
        submitButton = Button(Frame3, text = "Valider", command = submitCommand)
        fenetre.bind('<Return>', lambda e: e.widget.event_generate('<Tab>'))
        submitButton.grid(row = 4, column = 0, columnspan = 1)
     
    def ajtResult(ctc, ent1, ent2, ent3):
        nom = ent1.get()
        prenom = ent2.get()
        num = ent3.get()
        ctc[0].append(nom), ctc[1].append(prenom), ctc[2].append(num)
        rows = [[group[n] for group in ctc] for n in range(len(ctc[0]))]
        file = open("contacts.txt", "a")
        file.write("\n".join([repr(x) for x in rows]))
        file.close()
        ctc=[[],[],[]]
     
    def rch():
        Frame3.grid(row = 1, column = 2)
        Label1 = Label(Frame3, text = "Code 60 déclenché ")
        Label1.grid(row = 2, column = 2, columnspan = 2)
        c60fLabel = Label(Frame3, text = "Fin de code 60 ? ")
        c60fEntry = Entry(Frame3)
        c60fLabel.grid(row = 3, column = 2, columnspan = 2)
        c60fEntry.grid(row = 4, column = 2, columnspan = 2)
     
    Button(Frame1, text="Ajout Contact", command=ajt).pack(padx=300, pady=100)
     
    Button(Frame2, text="Recherche Contact", command=rch).pack(padx=300, pady=100)
    EN fait deja je ne comprends pas d'ou sortent les ent1 ent2 avec les get qui sont transformés en nom prenom et num dans la fonction ajtresult, si j'essaie de faire un print(nom) a ce niveau la j'ai un beau message d'erreur, si je fais un print(nomentry) pareil....

    Ou est stockée la valeur que je rentre dans les cases du form ? Il n'y a pas de variable et je ne sais pas comment les récupérer à part en mettant une variable 2d avec des []

    Merci de l'aide

  11. #11
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par jchuillier2 Voir le message
    Ok pour ca, mais vu que je veux avoir une variable à 2 dimensions pour que ca contienne nom, prenom, num comment je fais pour ne pas avoir à utiliser les [] qui me permettent d'avoir les 2 dimensions ?
    Il faut savoir faire la distinction entre le contenu de ton tableau et le format dans lequel tu le stockes (et tu le récupères) dans ton fichier.
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    >>> data=[["nom1", "prenom1", 123], ["nom2", "prenom2", 456], ["nom3", "prenom3", 789]]
    >>> print(data)
    [['nom1', 'prenom1', '123'], ['nom2', 'prenom2', '456'], ['nom3', 'prenom3', '789']]
    >>> with open("svg", "w") as fp:
    ...     for d in data:
    ...             print("{0}:{1}:{2}".format(d[0], d[1], d[2]), file=fp)
    ... 
    >>> data.clear()
    >>> print(data)
    []
    >>> with open("svg", "r") as fp:
    ...     for lig in fp:
    ...             d=lig.rstrip().split(":")
    ...             data.append(d)
    ... 
    >>> print(data)
    [['nom1', 'prenom1', '123'], ['nom2', 'prenom2', '456'], ['nom3', 'prenom3', '789']]

    Contenu du fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ cat svg
    nom1:prenom1:123
    nom2:prenom2:456
    nom3:prenom3:789
    $
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Import de rendez-vous depuis fichier txt
    Par Joachim49 dans le forum VBA Outlook
    Réponses: 4
    Dernier message: 17/03/2009, 11h43
  2. Création d'un tableau depuis fichier txt
    Par Joachim49 dans le forum VBA Outlook
    Réponses: 4
    Dernier message: 16/03/2009, 09h37
  3. Script Shell et update BD depuis fichier txt
    Par pcsystemd dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 10/07/2008, 22h22
  4. Attribuer la valeur d'une variable à un fichier txt,VBScript
    Par MartinezGarcia dans le forum VBScript
    Réponses: 4
    Dernier message: 12/02/2008, 10h35
  5. ecrire variable ds fichier txt
    Par Cheorches dans le forum VB.NET
    Réponses: 7
    Dernier message: 09/08/2007, 11h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo