IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Comparaison de fichiers csv


Sujet :

Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Comparaison de fichiers csv
    Bonjour,

    voilà je suis nouveau sur le site et j'ai une question car je reste bloqué et je deviens fou. >.<

    Je vous explique, j'ai 2 fichiers en .csv qui parle de communes le premier est le vieux et le second le nouveau recensement.

    Je voudrais qu'il puisse se comparer et créer un fichier numéro 3 ou dedans il y'aurait [les paramètres changés],[les paramètres supprimés] et [les paramètres ajoutés]

    Voici mon code pour l'instant:

    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
    from os import chdir ### importer le module chdir
    chdir("Z:\SP\Python") ###changement de répertoire
    import csv ## importer le module csv
     
    fname1="p1_20140127.csv" ### nom du fichier no1
    fname2="p2_20140127.csv" ### nom du fichier no2
     
     
    file1 = open(fname1,"rt") ###ouvre le fichier fname1 en lecture de texte par défault
     
    try:
        reader = csv.reader(file1) ###lire le fichier 1
        for row in reader:
            print (row[2],row[5],row[6],row[12]) ###écrire la colonne 2-5-6 et 12 du fichier p1
    finally:
        file1.close() ###fermer le fichier 1
        print("####################FICHIER 1 CLOSE####################")
     
    file2 = open(fname2,"rt") ###ouvre le fichier fname2 en lecture texte par défault
     
    try:
        reader = csv.reader(file2) ### lire le fichier 
        for row in reader:
            print (row[2],row[5],row[6],row[12]) ###écrire la colonne 2-5-6 et 12 du fichier p2
     
    finally:
        file2.close() ###fermer le fichier 2
        print("####################FICHIER 2 CLOSE####################")
     
    #####lecture des fichiers terminé#####
    EXEMPLE du fichier 1 et 2:

    onrp,type,zip,"complement","city","cityfull","canton",language,divlang,issorted,distributedby,bfs,"date"
    104,20,1000,"00","Lausanne","Lausanne","VD",2,NULL,0,130,5586,"1988-03-01"

    onrp,type,zip,"complement","city","cityfull","canton",language,divlang,issorted,distributedby,bfs,"date"
    104,20,1000,"00","Lausanne","Lausanne","VD",2,NULL,0,130,5586,"1988-03-01"

    J'espère que vous pourrez m'aider, Merci beaucoup =)

  2. #2
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 180
    Points : 321
    Points
    321
    Par défaut Pensez à la balise [code]
    Bonjour

    C'est très bien de ta part d'expliquer la finalité que tu poursuis. Néanmoins, cela nous serait plus facile de t'aider si.
    1. Tu postais ton code dans entre les balises prévues à cette fin (le boton #)
    2. Tu décrivait plus précisément sur quoi tu bloque


    Dans le code posté, tu parcours juste les fichiers en entrée et tu imprime une partie du contenu. Ton problème ne tient, à que qu'il me semble, pas à une question python mais à savoir comment procéder, l'algorithme.

    Confronté à ce type de problème, je chargerais chaque fichier de telle sorte qu'il soit facile et performant de faire des recherche. En mémoire, par exemple, ou dans une base sqlite (gros fichiers). Pour ce tu auras certainement besoin de normaliser les données (e.g. la casse)

    Un ultime conseil. Essaye des petits bouts de code dans idle, et ce à toutes les sauces. Tu avancera plus vite et mieux qu'en attendant que quelqu'un te ponde une solution toute faite.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Merci de votre réponse
    Merci et désoler pour mon code je ne connaissais pas cette fonction sur le site.

    Je vais essayer comme vous dites par des petits bout de code.

    Le seul problème (mais je vais essayer d'y remédier c'est que je ne sais pas dans quoi me diriger)

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Python re l'aventure continue
    Re Voilà j'ai réussi à pondre un code.

    Mais je ne comprends pas quand je le lance il me met invalid syntax et me souligne le print à la 56ême lignes.

    Quelqu'un pour m'aider =)

    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
    from os import chdir ### importer le module chdir
    chdir("Z:\SP\Python") ###changement de répertoire
    import csv ### importer le module csv
     
    fname1="p1_20140127.csv" ### nom du fichier no1
    fname2="p2_20140127.csv" ### nom du fichier no2
     
    ### listes qui contiennent les infos essentiels
    zipVieux = list()
    zipNouveaux = list()
    communeVieux = list()
    communeNouveaux = list()
     
    ### listes qui contiennent les modifications
    inchange = list()
    supprime = list()
    renomme = list()
     
    file1 = open(fname1,"rt") ###ouvre le fichier fname1 en lecture de texte par défault
    try:
        reader = csv.reader(file1) ###lire le fichier 1
        for row in reader: ### pour la colonne dans le fichier
            zipVieux.append(row[2])
            communeVieux.append(row[5])
    finally:
        file1.close() ###fermer le fichier 1
        print("Fichier 1 fermé et bien lu")
        print("nombre de vieux code postaux : ", len(zipVieux)) ###longeur de l'ancien zip
        print("nombre de vieux nom de communes : ", len (communeVieux))### Vérifié s'ils font la meme taille
     
    file2 = open(fname2,"rt") ###ouvre le fichier fname2 en lecture texte par défault
    try:
        reader = csv.reader(file2) ### lire le fichier 
        for row in reader:
            zipNouveux.append(row[2])
            communeNouveaux.append(row[5])
     
    finally:
        file2.close() ###fermer le fichier 2
        print("Fichier 2 fermé et bien lu")
        print("nombre de nouveaux code postaux : ", len(zipNouveaux))
        print("nombre de nouveaux nom de communes : ", len(communeNouveaux))
    #####lecture des fichiers terminé#####
     
    try:
        for i, elt in enumerate(zipVieux) :
            try:
                indexNouveau = zipNouveaux.index(elt)
                if communeVieux[i] == communeNouveaux[indexNouveau]:
                    inchange.append([elt,communeNouveaux[indexNouveau]])
                else:
                    ronomme.append([zipNouveaux[indexNouveau],communeNouveaux[indexNouveau]])
            except:
                supprime.append([elt,communeVieux[i]]) ###ajouter que la commune a été supprimées
     
    print("Nombre de communes inchangées : ", len(inchange))
    print("Nombre de communes renommées : ", len(renomme))
    print("Nombre de communes supprimées : ", len(supprime))
    print("Nombre de nouvelle communes : ", len(communeNouveaux))
    print("Communes ronnomées : ", renomme, "Communes supprimées : ", supprime, "Communes nouvelles : ", communeNouveaux)

    Merci.

  5. #5
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 180
    Points : 321
    Points
    321
    Par défaut
    Normal, il manque un bloc except: juste avant

  6. #6
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 180
    Points : 321
    Points
    321
    Par défaut
    Un conseil:
    Quand tu spécifie un chemin vers un fichier dans un littéral, adopte une des bonnes pratiques suivantes.
    • Préfixer le littéral avec un r
    • Redoubler les \
    • Utiliser le style unix : / au lieu de \ (cela marche même sous windows


    Ceci simplement parce que l'antislash signifie quelque chose comme caractère spécial. (e. g. \n veut dire passage à la ligne, \x45 caractère de code 45 (hexadécimal) etc...

  7. #7
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Petite remarque : tu mets trop de commentaires. Les commentaires doivent être efficaces et aider à la compréhension du code. Pour être efficaces, il ne doit en avoir ni pas assez (manque d'information) ni trop (il pollue le code et on ne les lit plus).

    Quelques exemples des plus frappants dans ton code : le commentaire ne sert à rien car il ne fait que répéter la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    from os import chdir ### importer le module chdir
    chdir("Z:\SP\Python") ###changement de répertoire
    file1.close() ###fermer le fichier 1
    Souvent, on commente des blocs pour décrire ce que fera le bloc et sa fonction, plutôt que ligne par ligne, sauf si chaque ligne est obscure (ce qu'on évite également).

    Ce n'est pas facile quand on début mais avec le temps ça vient et on finit par trouve le bon niveau de commentaires

  8. #8
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    Il y a beaucoup plus simples pour comparer deux fichiers, voir du côté du module difflib ...
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

Discussions similaires

  1. [2005] Chargement fichier CSV avec comparaison date
    Par gentelmand dans le forum SSIS
    Réponses: 1
    Dernier message: 24/04/2012, 11h55
  2. Comparaison et calcul sur 2 fichiers csv
    Par Sebounet54 dans le forum Pentaho
    Réponses: 4
    Dernier message: 10/12/2009, 08h55
  3. Fusion de fichiers .csv et comparaison avec fichier .xls
    Par GourenBZH dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 08/04/2008, 14h15
  4. Comparaison de fichier
    Par danzerg dans le forum Langage
    Réponses: 2
    Dernier message: 21/02/2003, 11h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo