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
# coding: utf-8  
'''
Created on 23 mars 2018
 
@author: dedalios
'''
import csv
import sqlite3
#
class vls_actes(object):
 
    def __init__(self,ACT_CODE,ACT_LIBELLE):
         self.ACT_CODE = ACT_CODE
         self.ACT_LIBELLE =ACT_LIBELLE
 
 
    def charger_csv(self,liste):
        self.ACT_CODE = liste[0]
        self.ACT_LIBELLE =liste[1]
 
    def __str__(self):
        resultat = "Act_Code :" +  self.ACT_CODE + "\n"
        resultat += "ACT_LIBELLE:" + self.ACT_LIBELLE      
        return  resultat
 
class Creation_table(object):
 
    """ Structure des tables  """
 
    def __init__(self):
        self.dbNAME ='vsl.sq3'  
        self.nomrepertoire =None
        self.Base =None
 
    def creer_table(self):
        self.dbNAME =self.nomrepertoire+'/'  +self.dbNAME
        self.Base =sqlite3.connect(self.dbNAME)  # ouverture DB
        curseur = self.Base.cursor() # appel au curseur
 
        vls_actes = """   CREATE TABLE vls_actes(
            ACT_CODE String(255),
            ACT_LIBELLE String(255),
            CONSTRAINT actes_pk PRIMARY KEY(ACT_CODE)
        ); """
 
        if(vls_actes!=""):
            try:
                curseur.execute(vls_actes)
                self.Base.commit()
            except:
                print("Problème vls_actes")
 
 
 
#
class ExcelFr(csv.excel):
    # Séparateur de champ
    delimiter = ";"
    # Séparateur de ''chaîne''
    quotechar = None
    # Gestion du séparateur dans les ''chaînes''
    escapechar = None
    doublequote = None
    # Fin de ligne
    lineterminator = "\r\n"
    # Ajout automatique du séparateur de chaîne (pour ''writer'')
    quoting = csv.QUOTE_NONE
    # Ne pas ignorer les espaces entre le délimiteur de chaîne
    # et le texte
    skipinitialspace = False 
 
if __name__ == '__main__':
    # Enregistre ce dialecte auprès du module csv
#    
    i=0 # iterateur du nombre de ligne lu
    csv.register_dialect('excel-fr', ExcelFr())
    fname = "actes.csv"
    file = open(fname, "r")
#
# Ouverture du fichier source.
#
# D'après la documentation, le mode ''b'' est
# *obligatoire* sur les plate-formes où il est
# significatif. Dans la pratique, il est conseillé
# de toujours le mettre.
#
    try:
        #
        # Création du ''lecteur'' CSV.
        #
        fichier_lu = csv.reader(file, 'excel-fr')
 
        for row in fichier_lu:
            i+=1
            # supression de la igne N° 1 du fichier porteur de l'entete
            if(i>1):
                nouvel_acte= vls_actes(row[0],row[1])
                print(nouvel_acte)
 
    finally:
        #
        # Fermeture du fichier source
        #
        file.close()

mon problème
Code : Sélectionner tout - Visualiser dans une fenêtre à part
            nouvel_acte= vls_actes.charger_csv(row)
l'exécution renvoi

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
   nouvel_acte= vls_actes.charger_csv(row)
TypeError: charger_csv() missing 1 required positional argument: 'liste'
la finalite effectué la convertion du csv en base sqllite.
Il existe effectivement des outils de convertion csv -> sqllite mais voila cela suppose que le fichier d'origine respecte les régles de codification ce qui n'est pas toujours cas , donc je préfére vérifier les données,
faire des convertions sur divers donnes de type numérique , sur des zones définie comme des date ...



Autre point si comme le recommande les informations la lecture de fichier csv on utilise la lecture "rb"

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
 file = open(fname, "rb")
cette commande retourne une erreur
for row in fichier_lu:
_csv.Error: iterator should return strings, not bytes (did you open the file in text mode?)