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 :

Probleme: chargement d'un fichier


Sujet :

Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2011
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Probleme: chargement d'un fichier
    Bonjour,
    J'ai commencé un programme qui permettra, en gros, d'avoir une synthèse de tous ses cours sur le pc. Mais bon, voilà le problème:
    La liste des cours, les cours, les chapitres, sous-chapitres, notes,... sont stockés dans des fichiers sans extensions (un fichier par cours qui contient pour chaque la liste de ses chapitres, chaque chapitres possèdent deux fichiers, un pour tout ce qui est notes, exercices,... et l'autre contient la liste de ses sous-chapitre (qui eux-mêmes ont 2 fichiers,...)). Mais j'aimerais que l'affichage des cours soient "dynamiques", par exemple, lorsque j'ajoute un cour, un fichier est créé et le nom du cour est inscrit dans la liste des cours, j'ai créé une fonction pour afficher les différent cours et donc je lance cette fonction à la fin de celle qui ajoute le cour, mais le cour ne s'affiche que tous les deux ajout. Enfin, bref, vous comprendrez peut-être mieux avec le code

    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    # -*- coding: cp1252 -*-
    from Tkinter import *
    import os
     
    verif=0
     
    try: #Crée le fichier de la liste de cour si il n'existe pas
        list_cours=open("Cours/Liste_cours","r")
        cours=list_cours.read().split("/220695/")
        cours.remove("")
        list_cours.close()
    except:
        path=os.getcwd()
        os.mkdir(path+"\\Cours")
        list_cours=open("Cours/Liste_cours","w")
        cours=[]
        list_cours.close()
     
    liste=["H","h","E","e","A","a","O","o","U","u","I","i","Y","y"] #Pour la 75e ligne
     
    def charg_c(): #Fonction pour afficher les cours
        global var
        list_cours=open("Cours/Liste_cours","r")
        cours=list_cours.read().split("/220695/") #Sépare les différents noms de cours
        cours.remove("")
        list_cours.close()
        if len(cours)==0:
            global lab, fen, verif
            verif=1
            lab=Label(fen, text="Désolé, vous n'avez pas\nencore ajouté de cours")
            lab.grid(row=6,column=5,rowspan=1)
        else:
            if verif==1:
                lab.destroy()
                del lab
            global cour, ajout_chap
            cours_bus=[]
            for i in range(0,len(cours)):            
                cour=Menubutton(fen,text=cours[i],relief="raised")
                cour.m=Menu(cour,tearoff=0)
                c_d=open("Cours/"+cours[i],"r")
                data=c_d.read().split("/220695/")
                data.remove("")
                c_d.close()
                for d in data:
                    cour.m.add_command(label=d,command= lambda chap=d: ouvrir_chap(chap))
                cour.m.add_command(label="Ajouter un chapitre", command= lambda c=cours[i]: ajout_chap(c))
                cour.config(menu=cour.m)
                cour.grid(row=6+i, column=5)
                cours_bus.append(cour)
        print "actualiser", cours #Pour vous prouvez que le fichier ne s'actualise pas
     
     
    def ajout_chap(cour): #Fonction pour ajouter un cour/chapitre
        def ajouter(EVENT=None):
            ph1=enAj.get()
            list_chap=open("Cours/"+cour,"a")
            list_chap.write(str(enAj.get())+"/220695/")
            list_chap.close
            new_chap=open("Cours/"+str(enAj.get()),"w")
            new_chap.close()
            if cour!="Liste_cours":
                new_chapNote=open("Cours/"+str(enAj.get())+"_notes","w")
                new_chapNote.close()
            fenAj.destroy()
            charg_c()
            fenOk=Toplevel()
            if cour=="Liste_cours":
                if ph1[0] in liste:
                    ph2="Le cour d'"
                else:
                    ph2="Le cour de "
            else:
                ph2='Le chapitre "'
            ph=ph2+ph1+'" a bien été ajouté'
            labOk=Label(fenOk, text=ph)
            labOk.grid(row=1,column=1,columnspan=3)
            buOk=Button(fenOk, text="Ok", command=fenOk.destroy)
            buOk.grid(row=2,column=2)
        fenAj=Toplevel()
        if cour=="Liste_cours":
            ph4="cour"
        else:
            ph4="chapitre"
        fenAj.title("Ajout d'un "+ph4)
        attAj=Label(fenAj, text="""ATTENTION, n'utilisez pas de caractères spéciaux (ç,à,é,...),
    au risque de dérégler complètement le programme""")
        attAj.configure(fg="yellow", bg="red")
        attAj.grid(row=1,column=1,columnspan=5)
        labAj=Label(fenAj, text="Titre :")
        labAj.grid(row=2,column=1,columnspan=3)
        enAj=Entry(fenAj)
        enAj.bind("<Return>", ajouter)
        enAj.grid(row=2,column=4,columnspan=3)
        valAj=Button(fenAj, text="Ajouter", command=ajouter)
        valAj.grid(row=3,column=3)
        annAj=Button(fenAj, text="Annuler", command=fenAj.destroy)
        annAj.grid(row=3,column=4)
     
    def ouvrir_chap(chap): #Cette fonction n'est pas finie
        global list_fen
        try:
            if list_fen==None:
                list_fen=[]
        except:
            list_fen=[]
        topfen=Toplevel()
        topfen.title(chap)
        list_fen.append(topfen) #Continuer de construire l'interface
     
     
    fen=Tk()
     
    lab_cours=Label(fen, text="Liste des cours")
    lab_cours.grid(row=5,column=1,columnspan=10)
     
    if len(cours)!=0:
        cond=len(cours)
    else:
        cond=1
    ajout_cour_bu=Button(fen, text="Ajouter un cours", command= lambda c="Liste_cours": ajout_chap(c))
    ajout_cour_bu.grid(row=6,column=1,rowspan=cond)
     
    charg_c()
     
    quitter=Button(fen, text="Quitter", command=fen.quit)
    quitter.grid(row=100, column=1, columnspan=10)
     
    fen.mainloop()
    Au fait, comme vous l'aurez surement remarqué, le programme est encore en pleine construction, alors soyez indulgent ^^

    Ah, et aussi, si vous connaissez une fonction pour enlever les caractère non acceptés dans les noms de fichiers, ça serait gentil

    Merci et désolé pour les éventuelles fautes d'orthographe

  2. #2
    Membre éprouvé
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Points : 1 006
    Points
    1 006
    Par défaut
    Citation Envoyé par Maxxixx Voir le message
    La liste des cours, les cours, les chapitres, sous-chapitres, notes,... sont stockés dans des fichiers sans extensions
    Ca serait certainement plus facile (ordonne et perfomant) de se servir d une base de donnee python-sqlite3 (un fichier unique sauvegarde toutes les infos. ) Bien entendu, cette Bd pourrait ne contenir que les informations "legeres" entre autre:
    - titre des cours
    - titre des chapitres
    - lien vers le fichier (sous bd contenant les autres infos)
    -- contenu du cours
    -- contenu des chapitres
    -- excercices
    -- notices
    -- ...

    Citation Envoyé par Maxxixx Voir le message
    Mais j'aimerais que l'affichage des cours soient "dynamiques", par exemple, lorsque j'ajoute un cour, un fichier est créé et le nom du cour est inscrit dans la liste des cours, j'ai créé une fonction pour afficher les différent cours et donc je lance cette fonction à la fin de celle qui ajoute le cour, mais le cour ne s'affiche que tous les deux ajout.
    Votre mode d affichage des cours est un peu touffu. Vous devriez opter pour des listes: une liste pour selectionner le cours, et une liste pour selectionner le chapitre. La seconde est mise a jour en fonction de l element selectionne dans la première.
    Win 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
    CONTENU D'UNE QUESTION
    Exemples:
    - Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
    - Code source du morceau de programme où il y a un bogue
    - Ligne de code sur laquelle le bogue apparaît
    - Erreur complète retournée pas l'interpréteur Python
    - Recherche déjà effectuée (FAQ, Tutoriels, ...)
    - Tests déjà effectués

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2011
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Je pense que vous n'avez pas bien compris la façon dont je veux enregistrer les infos (mais j'ai surement aussi mal expliqué ). j'ai choisi de ne pas mettre tous dans un seul fichier car j'aimerais que l'utilisateur puisse ajouté des sous-chapitres à l'infini (Cour/chapitre/sous-chapitre/sous-sous-chapitre/etc...) vous comprenez? Et aussi car je ne connais pas beaucoup d'autres méthodes pour enregistrer des infos à long terme
    sinon merci pour le conseil d'interface en liste
    J'essaye ça demain car je n'ai plus le temps aujourd'hui

  4. #4
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 824
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 824
    Points : 7 120
    Points
    7 120
    Par défaut
    Bonsoir,

    Pour votre problème, avons-nous besoin de l'interface graphique?

    Pouvez-vous situer la partie du code qui vous pose problème et seulement ce problème?

    Peut-être ce code sera utile à votre problème (j'avoue ne pas avoir tout compris)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ligne = " "
    with open("Cours/Liste_cours","r") as f:
        while ligne != "":
            cours = input("Entrez le nom du cours :")
            f.write(cours+"\n")
    Pourquoi attaquer directement sur une interface graphique si vous ne maîtrisez pas suffisamment les bases en python?

    Enfin bref ça mérite d'être plus précis et concis.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  5. #5
    Membre éprouvé
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Points : 1 006
    Points
    1 006
    Par défaut
    Citation Envoyé par Maxxixx Voir le message
    j'ai choisi de ne pas mettre tous dans un seul fichier car j'aimerais que l'utilisateur puisse ajouté des sous-chapitres à l'infini (Cour/chapitre/sous-chapitre/sous-sous-chapitre/etc...)
    Je pense que les Bases de donnees sont la representation informatique de l'infini
    Win 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
    CONTENU D'UNE QUESTION
    Exemples:
    - Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
    - Code source du morceau de programme où il y a un bogue
    - Ligne de code sur laquelle le bogue apparaît
    - Erreur complète retournée pas l'interpréteur Python
    - Recherche déjà effectuée (FAQ, Tutoriels, ...)
    - Tests déjà effectués

  6. #6
    Membre éclairé
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Points : 773
    Points
    773
    Par défaut
    Si j'ai bien compris, chaque "partie" possede:
    • un fichier indexant les sous-parties
    • un fichier propre à la partie


    (je n'ai pas lu ton code, la flemme)

    proposition 1:
    pour une partie nommée foo (par exemple):
    • créer un fichier 'foo' de contenu propre à la partie
    • créer un dossier 'foo_subparts'


    Ainsi la structure des partie est la même que ce soit des chapitres, sous-chapitre, etc... et l'on pourrait exploiter une fonction récursive. Le module os permettant de parcourir un dossier (os.listdir()), de vérifier si un élément est un dossier ou fichier (os.path.isfile()/os.path.isfolder()), il est alors très facile d'obtenir tous les fichiers contenu dans un dossier et ses sous-dossiers

    exemple de fonction récursive pour obtenir tous les chemins de fichiers d'un dossier et de ses sous-dossier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import os
     
    def get_all_files(path):
        for entry in os.listdir(path):
            entry_path = os.path.join(path,entry)
            if os.path.isfile(entry_path):
                yield entry_path
            elif os.path.isfolder(entry_path):
                for entry_path in get_all_files(entry_path):
                    yield entry_path
    proposition 2:

    Gardes ta structure de fichier/fichier index, mais donne leur une racine de nom commun. Par exemple admettons un chapitre 'foo' qui possède un sous-chapitre 'subfoo', le dossier et le contenu des fichiers s'organiseraient de la sorte (contenu des fichier 'xxx_content' non affiché) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    foo_index
        #contenu du fichier
        sub-foo
    foo_content
    sub-foo_index
        # contenu du fichier vide à cause de notre exemple
    sub-foo_content
    Ici encore, un fonction récursive est de mise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import os
     
    def get_all_files(base_name):
        if os.path.exists(base_name + '_content'):
            yield base_name + '_content'
        if os.path.exists(base_name + '_index'):
            with open(base_name +'_index','r') as f_in:
                for line in f_in:
                    if not line.strip():
                        continue
                    for file_path in get_all_files(line.strip()):
                        yield file_path
    bien évidemment, il faudra les adapter à ce que tu cherches à réaliser, ainsi au lieu de de retourner des noms de fichiers, tu voudras peut-être leur faire retourner les données des fichiers de contenu... c'est à toi de voir

    PS : code et message écrits à l'arrache

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2011
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    @afranck64

    En fait tu as bien compris le principe et le fait de tout sauvegarder dans un seul fichier semble intéressant mais je préfère utiliser des outils dont j'ai l'habitude (c-à-d les fichiers) mais merci quand même . Je penserais à python-sqlite3 lorsque mon programme fonctionnera pleinement

    @fred1599

    Tout d'abord je tiens à te dire que je trouve que je maitrise assez bien les bases de python pour m'attaquer à une interface (bien que je n'aie que 16 ans, que je vis à la campagne et que je n'ai que 2 heures de programmation par semaine). De plus, tu dis que je ne maitrise pas assez python? Mais je m'y connais assez pour te dire que votre code ne marchera pas car tu as mis un simple "input" au lieu d'un "raw_input" (franchement, qui est-ce qui pense à toujours mettre des "" autour de ses phrases?, à part les programmeurs bien sur ^^ et encore...)
    Maintenant que je me suis expliqué, je vais te ré-expliqué le programme.
    Tout d'abord les contenus des fichiers (ex: les titres) sont séparés par un /220695/ (pour être sûr que personne ne mettrais ce "mot" dans un titre ou des notes).
    Ensuite, si tu veux une représentation "textuelle" voici à quoi ça devrai ressembler:
    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
    Dans la console:
     
    Liste des cours
    1. Math
    1.1. Trigono
    1.2. Fonctions
    1.3. Ajouter un chapitre à "Math"
     
    2. Français
    2.1. Argumentation
    2.2. Victor Hugo
    2.3. Ajouter un chapitre à "Français"
     
    3. Ajouter un cour
    -------------------------
    Entrez le numéro du cour/chapitre que vous souhaitez ouvrir
    ou de ce que voulez faire: __
    Je ne te met pas les fonctions qui permettraient d'avoir un tel résultat (tu es assez intelligent pour les trouver) mais il devrait surement en avoir 2 principales, une pour explorer les fichiers et les feraient apparaître à l'écran ou alors conserverait la liste des cours et leurs subdivisions dans une variable pour remettre tout dans un ordre plus présentable. L'autre, pour ajouter un cour ou un chapitre. Ces 2 fonction seraient surement de la même logique que celles de mon programme avec les interactions graphiques en moins. J'espère que tu as compris mon programme maintenant.

    @N.tox

    Tu as apparemment bien compris la logique dans laquelle je travaille et c'est très gentil à toi de me proposer deux façon de parcourir les fichiers. Mais j'y avais déjà pensé et donc, ta contribution est un peu inutile . En passant, je crois que la méthode à laquelle j'avais réfléchi ressemble fortement à ta 2e proposition (bien que je ne comprenne pas grand chose à ton code (je ne maîtrise pas très bien le "yield"^^))

    @Tous


    Merci beaucoup de votre contribution, grâce à vous j'ai découvert des nouveaux moyens d'afficher les informations et de meilleures façons pour les trier Mais vous n'avez pas répondu à mon problème principal ^^' Je voulais surtout savoir pourquoi les fichiers ne "s'actualisent" que toutes les deux modification dans le dossier qui contient les cours.
    Voici un petit exemple pour mieux vous le représenter:
    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
    Voici les cours que contient la fenetre lors du lancement:
        Math /Chapitres: Trigono, Fonctions
        Francais /Chapitres: Victor Hugo
        Histoire /Chapitres: La révolution française
     
    Ensuite, j''ajoute (par exemple) le cour d''anglais grace au bouton "Ajouter un cour"
    et voici ce que contient maintenant la fenetre:
        Math /Chapitres: Trigono, Fonctions
        Francais /Chapitres: Victor Hugo
        Histoire /Chapitres: La révolution française
     
    Vous remarquez que rien n''a changer. Donc j''ajoute (par exemple) un chapitre au cour de
    Francais que je nomme "Argumentation" grace au bouton "Ajouter un chapitre" et voici se
    qu''affiche la fenetre:
        Math /Chapitres: Trigono, Fonctions
        Francais /Chapitres: Victor Hugo
        Histoire /Chapitres: La révolution française
        Anglais /Chapitre: None
     
    Cette fois, le cour que j''avais ajouté tout l''heure apparait mais le sous-chapitre non.
    Il faudra que je rajoute un cour ou un chapitre pour qu''il apparaisse. Et ceci continuera
    tant que je n''aurais pas fermer et rouvert le programme (cette fois, les données sont toutes là)
    J'espère que vous comprenez mon problème maintenant.
    Merci de votre aide si rapide

  8. #8
    Membre éclairé
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Points : 773
    Points
    773
    Par défaut
    Ahhh.... ton problème est plus clair maintenant, et de prima bord (toujours pas lu ton code, suis vraiment flemmard), je te conseillerais de vérifier que lorsque tu ajoutes un élément graphique, tu redessines bien les widgets de ta fenêtre (un redraw() ou refresh() si ma mémoire ne me fait défaut).

    Au sujet des yield, on les utilise pour faire d'une fonction un generator. Grossièrement, la différence avec une fonction classique, c'est que return met fin à la fonction, alors que yield "retourne" quelque chose et met la fonction "en pause".

    ex :
    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
    >>> def gen_10():
    	for x in range(10):
    		yield x
     
     
    >>> a=gen_10()
    >>> a
    <generator object gen_10 at 0x02F5CDF0>
    >>> for x in a:
    	print(x)
     
     
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9

  9. #9
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 824
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 824
    Points : 7 120
    Points
    7 120
    Par défaut
    Mais je m'y connais assez pour te dire que votre code ne marchera pas car tu as mis un simple "input" au lieu d'un "raw_input" (franchement, qui est-ce qui pense à toujours mettre des "" autour de ses phrases?, à part les programmeurs bien sur ^^ et encore...)
    Certainement parce-que tu ne dois pas savoir qu'une version 3.x est sortie

    Mais il est vrai qu'en regardant ton code en diagonale je n'avais pas vu la version de python que tu utilisais (tu aurais pu le spécifier aussi ).

    le "" représente aucune phrase justement
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  10. #10
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2011
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    @N.tox : je comprend le "yield" maintenant, mais ça me semble toujours aussi suspect x) J'essayerais de m'en souvenir qu'en j'aurais progressé
    Aussi, je crois que faire un redraw() ou refresh() (je n'en suis pas plus sûr que toi ) ne servirais à rien, car comme indiqué dans le programme, (tu aurais vraiment dû le lire ;P), j'ai déjà mis un print du contenu du fichier "Liste_cour" dans la fonction d'affichage des widgets qui s’exécute à chaque ouverture de la fenêtre et à l'ajout d'un nouveau chapitre/cour, ce qui en retourne la liste des cours, mais comme je l'ai déjà expliqué dans mon précédent post (la liste ne change que tous les 2 ajouts)

    @fred1599 : Quand je dis des "", je voulais dire des guillemets ^^ Et je savais déjà qu'une version 3.x de python était sortie mais je suis habitué à travailler sous Python 2.6. donc je ne connais pas toutes les spécificité de la 3.x ^^ Je m'en excuse

  11. #11
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 824
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 824
    Points : 7 120
    Points
    7 120
    Par défaut
    Quand je dis des "", je voulais dire des guillemets
    Euhhh...

    comment je peux expliquer ça? "" veut dire pas de caractères insérés

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    >>> rep = " "
    >>> while rep != "": # Tant qu'il n'y a pas d'absence de caractères
    ...     rep = raw_input("Comment allez-vous?")
    ...     print rep
    ... 
    Comment allez-vous?ca va
    ca va
    Comment allez-vous?je te dis que ca va!
    je te dis que ca va!
    Comment allez-vous?merde!!!
    merde!!!
    Comment allez-vous?
    # la je répond rien, je sors donc de la boucle
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  12. #12
    Membre éclairé
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Points : 773
    Points
    773
    Par défaut
    Je suis juste un poil moins flemmard que tout à l'heure, donc j'ai parcouru en diagonnale ton code... j'ai vite abandonner l'idée d'essayer de comprendre (trop d'abréviations non explicite à mon goût). Néanmoins, j'ai reperé un petite faute, juste ici :
    def ajout_chap(cour): #Fonction pour ajouter un cour/chapitre
    def ajouter(EVENT=None):
    ph1=enAj.get()
    list_chap=open("Cours/"+cour,"a")
    list_chap.write(str(enAj.get())+"/220695/")
    list_chap.close
    C'est peut-être ça qui fout le bordel...

    une autre façon de l'écrire, pour information simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def ajout_chap(cour): #Fonction pour ajouter un cour/chapitre
        def ajouter(EVENT=None):
            ph1=enAj.get()
            with open("Cours/"+cour,"a") as f_out:
                f_out.write(str(enAj.get())+"/220695/")

  13. #13
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2011
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    F*ck Yeah Merci N.tox C'était ça qui bloquait tout
    Par contre maintenant je doute de ma santé mental d'avoir loupé ça x)

    En tout cas, merci à tous ceux qui ont tenté de m'aidé
    Vous êtes double super ! (Mais d'où vient donc cette expression? )

    Je mets la discussion sur "Résolue"

  14. #14
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 824
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 824
    Points : 7 120
    Points
    7 120
    Par défaut
    Et le code préférable est le 2ème code de N.tox qui est soit dit en passant le même que mon 1er code exemple où tu avais juste à adapter.

    with c'est mieux, ça gère plein de choses

    @N.tox

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    f_out.write(ph1+"/220695/")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> type(ent.get())
    <type 'str'>
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  15. #15
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2011
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Je n'ai encore jamais essayé les 'with', je tacherai d'y pensé lorsque je travaillerais de nouveau sur les fichiers.
    Merci encore

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. probleme de chargement d'un fichier en centos
    Par monta_amri dans le forum Linux
    Réponses: 2
    Dernier message: 02/04/2015, 16h43
  2. Probleme sur le chargement d'un fichier texte
    Par xanthos dans le forum HyperFileSQL
    Réponses: 0
    Dernier message: 16/03/2011, 13h23
  3. Réponses: 0
    Dernier message: 24/08/2008, 10h56
  4. Probleme pour lire un fichier Ini
    Par Sebinou dans le forum C++Builder
    Réponses: 11
    Dernier message: 10/03/2004, 23h22
  5. [BP7] Problème chargement de ressource dans une DLL
    Par Alcatîz dans le forum Turbo Pascal
    Réponses: 11
    Dernier message: 26/07/2003, 21h36

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