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 :

jointure deux csv


Sujet :

Python

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    321
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 321
    Points : 109
    Points
    109
    Par défaut jointure deux csv
    bonjour,

    j'essai de mettre à jour un csv à partir d'un autre...

    table1 ( à mettre à jour)
    ID texte
    1 oui
    2 non
    3 non

    table2
    id
    1
    2


    si les id de la table 2 se trouve dans la table 1 alors le texte passe à oui dans la table1

    pour cette exemple j'essaie d'obtenir une table :

    ID texte
    1 oui
    2 oui
    3 non


    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
    fichier2=open(r'C:\table1.csv',"r")
    fichier=r'C:\table2.csv'
    result=open(r'C:\fichi.csv', "w",newline='')
    
    reader2 = csv.reader(fichier2, delimiter=';',header=False)
    col_a=[row[0] for row in reader2]
    fich=[]
    fields = ["col1","col2"]
    writer = csv.writer(result,delimiter = ";")
    writer.writerow (fields)
    with open (fichier,'r') as csvfile:
        reader = csv.reader(csvfile, delimiter=';')
        next(reader,None)
        for row,text in reader:
            for rows in col_a:
                if rows==row:
                    texte='oui'
                    code=row
                    fich.append((code,texte))
        if row not in fich:
            fich.append((row,text))
          
    writer = csv.writer(result,delimiter = ";",quotechar='"')
    writer.writerows(fich)
    result.close()
    donc je suis pas certain que ce soit la "Bonne" pratique mais je ne trouve pas de moyen d'enlever la lecture des colonnes et du coup ces entêtes sont ajoutés en + des autres lignes??

    si quelqu'un à des liens ou explications à me donner...?

    merci d'avance



    edit : bon j'ai trouvé une solution pour les champs (en vert dans la partie code ) juste après avoir poster ce message..

    par contre je n'arrive pas à remplir le nouveau csv avec cette valeur " 3 non" qui ne joint pas mais qui est présente dans la table1.

    si il y a une manière plus "pythonesque", je suis preneur des quelques conseils...:-)

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    321
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 321
    Points : 109
    Points
    109
    Par défaut
    bonjour,

    j'ai réussit à faire ce que je voulais...bon je suppose qu'il doit encore y avoir des choses à améliorer alors tt commentaire est le bienvenu..

    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
     
    fich=[]
    fichier=open(r'C:\table2.csv',"r")
    reader = csv.reader(fichier, delimiter=';')
    next(reader,None)
     
    fichier2=open(r'C:\table1.csv',"r")
    reader2 = csv.reader(fichier2, delimiter=';')
     
    colb=[(b,a) for b,a in reader]
     
    cola=[row[0] for row in reader2]
     
    a=[row for row,text in colb if row in cola]
    b=[row for row,text in colb if row not in cola]
     
    result=open(r'C:\fichi.csv', "w",newline='')
    fields = ["col1","col2"]
    writer = csv.writer(result,delimiter = ";",quotechar='"')
    writer.writerow (fields)
    for row in a: 
        fich.append((row,'oui'))
     
    for row in b:
        fich.append((row,"non"))
     
    a=set(fich)
    writer.writerows(a)
    result.close()
    merci

Discussions similaires

  1. [MySQL] jointure deux table et moteur de recherche
    Par speedylol dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 27/12/2012, 20h52
  2. Jointure fichiers csv dans Sunopsis
    Par TofMand25 dans le forum ODI (ex-Sunopsis)
    Réponses: 5
    Dernier message: 26/09/2012, 07h46
  3. [AC-2007] jointure deux base différente
    Par lovedesitaliens dans le forum Access
    Réponses: 2
    Dernier message: 30/11/2010, 09h08
  4. Jointure deux tables
    Par Ljosse dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 19/05/2010, 17h49
  5. problème jointure deux ficher en bash
    Par afinhadchi dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 11/01/2010, 10h36

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