Utiliser un fichier CSV

preliator -  
jee pee Messages postés 31903 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour à tous,

Ayant une bonne connaissance en base de données et SQL, j'aimerais pouvoir automatiser la tâche de recupération des données d'un fichier CSV avec python.

L'idée, ça serait d'avoir un fichier csv contenant une liste de colonnes et de lignes variables du type :

NOM;PRENOM;NAISSANCE;VILLE;AGE
CASTEL;JULIETTE;10/12/2000;LYON;15
COHEN;PABLO;16/05/1980;LYON;78
AL BELA;ABDEL;02/09/2001;LA CIOTAT;23
CHAPELON;FRED;03/10/2012;PARIS;56

... et de créer un fichier .txt en sortie contenant ce script :

[CODE]
insert into NOM_DE_LA_TABLE (nom, prenom, naissance, ville, age) values
('CASTEL', 'JULIETTE', '10/12/2000', 'LYON', 15),
('COHEN', 'PABLO', '16/05/1980', 'LYON', 78),
etc ...
[/CODE]

Malheureusement, je ne sais pas trop comment m'y prendre.

Merci et bonnes fêtes.

3 réponses

  1. jee pee Messages postés 31903 Date d'inscription   Statut Modérateur Dernière intervention   9 985
     
    Je ne fais pas vraiment de python donc ne comprends pas entièrement ton code.

    Moi j'imagine un code du style chargement dans un tableau, pas utiliser les headers pour avoir un code plus générique

    import csv
    with open('passwd.csv', newline='') as f:
    reader = csv.reader(f)
    for i in range(len(reader)):
        if i = 1:
           print('insert into NOM_DE_LA_TABLE (')
           for j in range(len(reader[i])):
               print(reader[i][j], end=' ')
           print(') values ')
        else
           print('(')
           for j in range(len(reader[i])):
               print(reader[i][j], end=' ')
           print(')')
    print()


    (il faut affiner pour placer des virgules entre les champs et des simples cotes par encadrer les valeurs)
    1
  2. jee pee Messages postés 31903 Date d'inscription   Statut Modérateur Dernière intervention   9 985
     
    Bonjour,

    Il existe un module python pour gerer des csv : https://www.quennec.fr/trucs-astuces/langages/python/python-le-module-csv

    En lecture tu obtiens un tableau, il faut alors faire une boucle sur le tableau pour écrire dans un fichier texte. La 1ère ligne du tableau étant traitée différemment des suivantes.

    Tu peux aussi tout traiter toi même. Un csv c'est un fichier texte tout bête. Tu as le fichier csv en entrée, un fichier texte en sortie et tu traites les lignes une par une en découpant la ligne avec le séparateur ; La 1ère ligne du fichier étant là aussi traitée différemment des suivantes.

    Cdlt
    0
  3. preliator
     
    Merci pour votre réponse.
    Grâce à votre site, j'ai un début de piste avec ce code :

    import csv
    import re
    
    with open("data.csv", "r", newline = '') as donnees:
    	reader = csv.reader(donnees, delimiter = ";")
    	for row in reader:
    		print("(" + "'"+ row[0] + "'" + ',' + "'" + row[1]  + "'" + ',' + "'" + row[2]  + "'" + ',' + "'" + row[3]  + "'" + ',' + row[4]  + ")" + ',')
    


    Ou j'arrive à afficher les éléments comme dans l'exemple :
    ('CASTEL', 'JULIETTE', '10/12/2000', 'LYON', 15),
    ('COHEN', 'PABLO', '16/05/1980', 'LYON', 78),
    etc

    Mais ça reste extrêmement manuel et le code ne s'adapte pas au nombre changeant de colonne. Je continue de chercher un moyen de le rendre plus efficace.

    Merci.
    0
    1. trifou
       
      Bonsoir,

      Cela se fait avec format et join.

      for row in reader:
          print('("{}")'.format('","'.join(row)))
      0