erreur de syntaxe en dicreader

a marqué ce sujet comme résolu.

bonjour, svp quelqu’un peut me dire pourquoi ça marche pas quand j’ajoute dictreader dans la fonction de la classe

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
class Bp:
    '''classe de bp'''

    def __init__(self):
        self.bp_code = bp_code
        cass=[]
    with open('bp.csv') as bp:
        reader = csv.DictReader(bp)

        for row in reader:
             bp = Bp()

             dicbp={row['bp_code']}

retounrne l’erreur *

1
2
3
4
5
6
7
>            
>   Traceback (most recent call last):
>   File "E:/MAHA/Documents/8.py", line 8, in <module>
>     class Bp:
>   File "E:/MAHA/Documents/8.py", line 18, in Bp
>     bp = Bp()
> NameError: name 'Bp' is not defined   
+0 -0

Bonjour

Déjà merci de ne pas utiliser le langage "SMS"

ensuite, il me semble que l’erreur est suffisamment parlante : La variable bp n’est pas défini à cet endroit

1
 extract_bp(bp)

Cela dit, je pense qu’elle est inutile.

+1 -0

Pourquoi la fonction extract_bp est-elle définie comme méthode de la classe p, alors qu’elles ne semblent rien avoir en commun ?

Une méthode est censée recevoir un paramètre self, et le paramètre bp de ta méthode est inutile.

parce que j’ai déja essayé comme ça

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
class Bp():
    '''classe de bp'''

    def __init__(self,bp_code):
        """Constructeur avec parametres par defaut.""" 
        self.bp_code = bp_code



    with open('maha/bp.csv') as bp:
        reader = csv.DictReader(bp)
        for row in reader:


            print(row['bp_code'])

ça marche mais si je veux ajouter une instanciation de classe

1
2
for row in reader:
  bp= Bp()

ca me donne

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
Traceback (most recent call last):   
  File "E:/maha/Documents/8.py", line 8, in <module>   
    class Bp():   
  File "E:/maha/Documents/8.py", line 20, in Bp   
   bp = Bp()   
NameError: name 'Bp' is not defined
>>> 



`
+0 -0

merci angelo mais si je supprime bp ça me donne extract_bp() takes exactly 1 argument (0 given)

mahaman1224

Oui il faut être cohérent et faire la suppression à l’appel et à la définition

ca me donne

1
2
3
4
5
6
7
Traceback (most recent call last):   
  File "E:/maha/Documents/8.py", line 8, in <module>   
    class Bp():   
  File "E:/maha/Documents/8.py", line 20, in Bp   
   bp = Bp()   
NameError: name 'Bp' is not defined
>>> 
mahaman1224

Surement un problème d’import ou de définition de classe mal placée

Le code que tu nous as donné est mal indenté: Le with est dans ta classe ou hors de ta classe ?

Personnellement je n’ai pas de problème

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
import csv

class Bp():
    '''classe de bp'''
    def __init__(self,bp_code):
        """Constructeur avec parametres par defaut.""" 
        self.bp_code = bp_code
        print(self.bp_code)


with open('bp.csv') as bp:
    reader = csv.DictReader(bp)
    for row in reader:
        bp = Bp(row['bp_code']) 
+0 -0

il va falloir revoir les bases :D

1
bp = Bp( ... ) # crée une instance de la classe Bp (autrement dit un objet)

Comme tu le fais dans une boucle, tu crée autant d’objet que de fois ou tu entres dans la boucle

On le voit facilement en faisant un print

1
2
3
for row in reader:
    bp = Bp(row['bp_code']) 
    print(bp)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
<__main__.Bp instance at 0x022F7580>
<__main__.Bp instance at 0x022FF148>
<__main__.Bp instance at 0x022F7580>
<__main__.Bp instance at 0x022FF148>
<__main__.Bp instance at 0x022F7580>
<__main__.Bp instance at 0x022FF148>
<__main__.Bp instance at 0x022F7580>
<__main__.Bp instance at 0x022FF148>
<__main__.Bp instance at 0x022F7580>
<__main__.Bp instance at 0x022FF170>
+0 -0

J’aimerais bien t’expliquer plus, mais je ne comprends pas. Tu veux peut-être construire une liste de tes objets ? Dans ce cas il te faudrait définir une liste et y insérer chaque objet instancié.

Par contre je pense que tu devrais relire un cours sur le Python pour en consolider les bases, par exemple Apprendre à programmer avec Python 3 de Gérard Swinnen.

J’avoue ne pas trop comprendre non plus, mais concernant l’utilisation d’une classe, qui me semble un peu inutile dans ce cas de figure, je ferai de cette manière

 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
from os import path

import csv
import sys

class Bp:

    def __init__(self, filename=None):
        self.filename = filename
    def load(self):
        # test du renseignement de filename
        # test existence du fichier
        try:
            with open(self.filename) as f:
                self.reader = csv.DictReader(f)
        except EnvironmentError:
            self.reader = None
        return self.reader
    # méthodes à compléter pour la suite du traitement

if __name__ == "__main__":
    bp = Bp('bp.csv') # Utilisation sys.argv adéquate
    loaded = bp.load()
    if not loaded:
        sys.exit('...') # ou autre traitement en cas d'échec du chargement
    # Faire en cas de chargement réussi

à prendre avec des pincettes car non testé, mais c’est l’idée qui compte.

Après je ne vois pas quoi rajouter, car il n’y a pas de détails, peu de code et pas suffisamment d’explication concernant ce que tu souhaites faire.

+1 -0

merci infiniment fred1599 c’est exactement comme ça mais juste 2 questions dans le constructeur je dois créer les variable des tables que je vais utiliser dans les traitements ou pas?.. et ou cas de plusieurs fichiers je déclare tout les fichiers dans le constructeur comme ça?

1
2
3
def __init__(self, filename1=None,filename2=None):

`
+0 -0

je dois créer les variable des tables que je vais utiliser dans les traitements ou pas?.. ```

mahaman1224

je ne vois pas trop où tu veux en venir, mais par rapport à ton constructeur présenté, un traitement sera plutôt dans une autre méthode,

1
2
3
def compare(self, destination):
    # traitement de comparaison entre le fichier constructeur
    # et le fichier destination

puis

1
2
3
4
5
6
if __name__ == "__main__":
    bp = Bp('bp.csv') # Utilisation sys.argv adéquate
    loaded = bp.load()
    if not loaded:
        sys.exit('...') # ou autre traitement en cas d'échec du chargement
    bp.compare('...') # Faire en cas de chargement réussi
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte