Partage
  • Partager sur Facebook
  • Partager sur Twitter

Création de fichiers PYTHON

csv X classe

Sujet résolu
    23 janvier 2020 à 16:51:15

    Bonjour, 
    Je souhaite créer des fichiers qui porte le nom d'un composant propre au dossier portant le nom de ce même composant hors je n'y arrive pas et je ne sais pas si c'est réellement possible ! 
    Sachant que la création des dossiers marche très bien mais pas celle des fichiers ! 
    En espérant avoir été le plus claire possible par ailleurs je vous remercie d'avance pour toute aide / réponses / pistes que vous me donnerez, elles me seront précieuses ! 
    try : 
        os.mkdir('.\\components')
    except :  
        print("\n */!\* LE DOSSIER COMPONENT N'EST PAS VIDE */!\* \n")
    
    
    for component in component_set :  
        try : 
            os.mkdir('.\\components\\{}'.format(component.name))
        except :
           print("\n */!\* LES SOUS-DOSSIERS COMPONENT NE SONT PAS VIDE */!\* \n")
    
    for component in component_set :  
        try : 
            os.mkdir('.\\components\\{}\\c99'.format(component.name))
        except :
            os.rmdir('.\\components\\{}\\c99'.format(component.name))    
            os.mkdir('.\\components\\{}\\c99'.format(component.name))
    
    
    for component in component_set :
        with open('.\\components\\{}\\c99\\{}.c'.format(component.name,component.name), 'rw') 
        as mon_fichier.c:
    
        with open('.\\components\\{}\\c99\\{}.h'.format(component.name,component.name), 'w') 
        as mon_fichier.h:
        with open('.\\components\\{}\\c99\\{}_message.h'.format(component.name,component.name), 'w') 
        as mon_fichier_message.h:
    
    
    #############################################################################
    #Je vous transmet mon code en entier :
    #############################################################################
    import csv
    import os
    import sys
    
    print(sys.argv)
    
    class Component : 
        ### Classe définissant un Composant par :
        # - sa description
        # - son nom
        # - son address 
    
       def __init__ (
           self, 
           description, 
           name, 
           address) :
    
           self.description = description 
           self.name = name
           self.address = address
           self.logic_list = []
           self.analog_list = []
    
    class IO : 
        ### Classe définissant un IO par :
        # - son connector
        # - son pin 
        # - sa fonction 
    
        def __init__ (
            self, 
            connector, 
            pin, 
            function) :
    
            self.connector = connector
            self.pin = pin
            self.function = function
    
    class Logic :
        ### Classe définissant Logic par : 
        # - initial
        # - invert 
        # - name
        # - description
        # - strength
    
        def __init__ (
            self, 
            initial, 
            invert,
            name,
            description,
            strength,
            io) : 
    
            self.initial = initial
            self.invert = invert 
            self.description = description
            self.name = name
            self.strength = strength
            self.io = io 
    
    class Analog : 
        ### Classe définissant Analog par :
        # - initial
        # - cut
        # - cut_raw
        # - decimals
        # - a 
        # - b
        # - min 
        # - max
        # - unit
        # - description
        # - name
        # - strength
    
        def __init__ (
            self, 
            initial,
            cut,
            cut_raw, 
            decimals, 
            a, 
            b, 
            mini, 
            maxi, 
            unit, 
            name,
            description,
            strength,
            io) :
    
            self.initial = initial 
            self.cut = cut
            self.cut_raw = cut_raw
            self.decimals = decimals
            self.a = a 
            self.b = b
            self.mini = mini
            self.maxi = maxi
            self.unit = unit
            self.description = description
            self.name = name
            self.strength = strength
            self.io = io
    
    
    component_set = set()
    csv_list = []
    
    
    #Récupère mes éléments du CSV et les stocks dans un "Dictionnaire"
    with open(".//data.csv", newline='') as csvfile :
            csv_reader = csv.DictReader(csvfile, delimiter=";")
    
            for row in csv_reader :
                component = ""
    
                for existing_component in component_set :
                    if row['c.name'] == existing_component.name :
                        component = existing_component
                if component == "" : 
                    component = Component(
                        row['c.description'],
                        row['c.name'],
                        row['c.address'])
                    component_set.add(component)
                io = IO(
                    row['io.connector'], 
                    row['io.pin'], 
                    row['io.function'])
    
                if row['d.type'] == "Logic" :
                    logic = Logic(
                        row['initial'],
                        row['invert'],
                        row['d.description'],
                        row['d.name'],            
                        row['d.strength'],        
                        io                   
                        )
                    component.logic_list.append(logic)
    
                elif row['d.type'] == "Analog" :
                    component.analog_list.append(Analog(
                        row['initial'],
                        row['cut'],
                        row['cut_raw'],
                        row['decimals'],
                        row['a'],
                        row['b'],
                        row['min'],
                        row['max'],
                        row['unit'],
                        row['d.description'],
                        row['d.name'],              
                        row['d.strength'], 
                        io
                        ))
    
                else :
                    assert 0, "Invalid value in 'type' column."
    
                component_set.add(component)
    
    print(len(component_set))
    
    
    
    try : 
        os.mkdir('.\\components')
    except :  
        print("\n */!\* LE DOSSIER COMPONENT N'EST PAS VIDE */!\* \n")
    
    
    for component in component_set :  
        try : 
            os.mkdir('.\\components\\{}'.format(component.name))
        except :
           print("\n */!\* LES SOUS-DOSSIERS COMPONENT NE SONT PAS VIDE */!\* \n")
    
    for component in component_set :  
        try : 
            os.mkdir('.\\components\\{}\\c99'.format(component.name))
        except :
            os.rmdir('.\\components\\{}\\c99'.format(component.name))    
            os.mkdir('.\\components\\{}\\c99'.format(component.name))
    
    
    for component in component_set :
        with open('.\\components\\{}\\c99\\{}.c'.format(component.name,component.name), 'rw') 
        as mon_fichier.c:
    
        with open('.\\components\\{}\\c99\\{}.h'.format(component.name,component.name), 'w') 
        as mon_fichier.h:
        with open('.\\components\\{}\\c99\\{}_message.h'.format(component.name,component.name), 'w') 
        as mon_fichier_message.h:
    • Partager sur Facebook
    • Partager sur Twitter

    Jeune développeur en quête de connaissances ...

      23 janvier 2020 à 17:04:41

      Le with open() sans bloc d'instruction derrière, ça plante non ?

      Faut mettre quelque chose sinon ça doit lever une IndentationError d'après mes tests.

      Si tu veux ne rien faire de spécial, tu peux écrire pass :

      with open(...):
          pass


      Sinon les except sans indiquer l'exception à capturer, ça capture tout, il faut éviter ça parce que toutes les exceptions ne doivent pas de traiter de la même manière, et ça masque le traceback des exceptions que tu n'as pas traité.

      -
      Edité par LoupSolitaire 23 janvier 2020 à 17:09:09

      • Partager sur Facebook
      • Partager sur Twitter

      Blond, bouclé, toujours le sourire aux lèvres...

        23 janvier 2020 à 17:08:26

        Yes,

        J'ai modif mon code entre temps en mettant le "pass" (merci quand meme ;) ) mais du coup tu pense que c'est possible d'auto générer mes fichiers avec ça ou il existe une autre méthode que je ne connais pas ??? 

        Parce que j'ai pas l'impression que ce soit viable avec le open()  



        • Partager sur Facebook
        • Partager sur Twitter

        Jeune développeur en quête de connaissances ...

          23 janvier 2020 à 17:15:35

          Chez moi ça marche, ça crée un fichier vide.

          Le code que j'ai utilisé :

          with open("fichiertest", "w"):
            pass
          



          -
          Edité par LoupSolitaire 23 janvier 2020 à 17:16:21

          • Partager sur Facebook
          • Partager sur Twitter

          Blond, bouclé, toujours le sourire aux lèvres...

            27 janvier 2020 à 8:06:36

            Hop c'est bon du coup j'ai trouvé la solution je suis juste bête ^^ 

            #Génère les fichiers .cpp , .hpp et _message.h dans chaque dossier "Qt" de chaque composant
            for component in component_set :
                with open('.\\components\\{}\\Qt\\{}.cpp'.format(component.name,component.name), 'w') :
                    pass
                with open('.\\components\\{}\\Qt\\{}.hpp'.format(component.name,component.name), 'w') :
                    pass
                with open('.\\components\\{}\\Qt\\{}_message.h'.format(component.name,component.name), 'w') :
                    pass
            

            je pouvais juste pas mettre de "as" dans mon ouverture de fichier la demande d'aide est donc close merci pour ton implication LoupSolitaire

            -
            Edité par LeBroSympa 27 janvier 2020 à 9:43:28

            • Partager sur Facebook
            • Partager sur Twitter

            Jeune développeur en quête de connaissances ...

            Création de fichiers PYTHON

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown