Utiliser un fichier CSV

Fermé
preliator - 26 déc. 2019 à 18:54
jee pee Messages postés 39694 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 5 mai 2024 - 26 déc. 2019 à 20:26
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.
A voir également:

3 réponses

jee pee Messages postés 39694 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 5 mai 2024 9 257
26 déc. 2019 à 20:26
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
jee pee Messages postés 39694 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 5 mai 2024 9 257
Modifié le 26 déc. 2019 à 19:25
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
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
Bonsoir,

Cela se fait avec format et join.

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