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 :

Mettre a jour un fichier CSV a partir d'un autre


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Alternant
    Inscrit en
    Décembre 2022
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Alternant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2022
    Messages : 12
    Par défaut Mettre a jour un fichier CSV a partir d'un autre
    Bonjour,

    Je viens vers vous car j'ai un projet assez difficile a rendre a la fin de l'année (je suis en alternance c'est ce projet qui me fera ou non obtenir mon bts).

    Je doit mettre a jour le catalogue de l'entreprise dans laquelle je travail avec un bot en python.

    J'ai une v1 de l'algo :
    Nom : algo.jpeg
Affichages : 474
Taille : 146,9 Ko


    Pour l'instant, mon "bot" se connecte sur le site du fournisseur, va télécharger la bdd a jour et la renomme.

    Maintenant je dois utiliser le nouveau fichier téléchargé par le bot pour mettre a jour notre fichier en local. Voici la structure du fichier que nous donne notre fournisseur (sur 3450 lignes) :
    Nom : Capture d’écran 2022-12-09 160934.png
Affichages : 438
Taille : 53,0 Ko


    Et voici la structure de notre bdd en local (elle aussi en CSV) :
    Nom : zezrrrzeze.png
Affichages : 445
Taille : 23,6 Ko


    Donc la j'en suis rendu a la comparaison que vous voyez au début de l'algo. Le but serais que le programme puisse récupérer les EAN des deux tableaux, qu'il se servent des ces EAN comme "id" pour chaque produit pour pouvoir mettre a jour la quantité et les stocks de chaque produit sur notre fichier en local pour qu'ensuite on puisse l'upload sur notre site web.

    Il faudrait aussi que si un produit existe dans le tableau du fournisseur mais n'existe pas dans notre tableau alors il le skip (il fait aucune action sur notre tableau en local) et si un produit existe chez nous mais pas chez le fournisseur, il met la quantité et le prix a 0.

    J'ai fait beaucoup de recherche sur internet pour cette fameuse partie de l'algo mais je ne trouve rien de vraiment fonctionnel, en espérant que quelqu'un aura les compétences et la patience de m'aider ! Merci pour la lecture have a nice day

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par damien.1l2 Voir le message
    Je viens vers vous car j'ai un projet assez difficile a rendre a la fin de l'année (je suis en alternance c'est ce projet qui me fera ou non obtenir mon bts).
    Fin d'année scolaire ou fin d'année 2022?

    Citation Envoyé par damien.1l2 Voir le message
    Le but serais que le programme puisse récupérer les EAN des deux tableaux, qu'il se servent des ces EAN comme "id" pour chaque produit pour pouvoir mettre a jour la quantité et les stocks de chaque produit sur notre fichier en local pour qu'ensuite on puisse l'upload sur notre site web.
    Effectivement il faut trouver un point de comparaison et l'EAN est effectivement ce point de comparaison. Mais pas besoin de récupérer les EAN des deux tableaux !!! Tu as juste besoin d'une fonction qui, à partir d'un EAN, renvoie la ligne de ta bdd contenant cet EAN (je dis "la" car je pars du principe qu'il n'y a qu'une seule correspondance). Ensuite, ayant cette ligne, tu peux donc la modifier comme tu en as envie.
    Donc grosso-modo
    • tu lis chaque EAN du fichier récupéré
    • via ta fonction, pour l'EAN en cours tu récupères la ligne correspondante dans ta bdd
    • tu modifies la ligne et tu passes à l'EAN suivant

    Et si ta bdd est une vraie bdd (qu'elle accepte des ordres SQL), alors la mise à jour est immédiate. Sinon si ta bdd n'est pas super lourde tu peux prendre l'option de la charger en RAM au début du programme et l'écrire quand le programme se termine (faut faire gaffe aux accès multi-concurrents => plusieurs programmes exécutés en parallèle par plusieurs users et ça c'est dans tes contraintes que tu n'as pas données)

    Citation Envoyé par damien.1l2 Voir le message
    J'ai fait beaucoup de recherche sur internet pour cette fameuse partie de l'algo mais je ne trouve rien de vraiment fonctionnel
    Un peu normal, internet ne contient que des choses écrites par d'autres et ce que les gens écrivent sont en général des concepts généraux, pas spécifiques comme le tien.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre habitué
    Homme Profil pro
    Alternant
    Inscrit en
    Décembre 2022
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Alternant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2022
    Messages : 12
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Bonjour

    Fin d'année scolaire ou fin d'année 2022?


    Effectivement il faut trouver un point de comparaison et l'EAN est effectivement ce point de comparaison. Mais pas besoin de récupérer les EAN des deux tableaux !!! Tu as juste besoin d'une fonction qui, à partir d'un EAN, renvoie la ligne de ta bdd contenant cet EAN (je dis "la" car je pars du principe qu'il n'y a qu'une seule correspondance). Ensuite, ayant cette ligne, tu peux donc la modifier comme tu en as envie.
    Donc grosso-modo
    • tu lis chaque EAN du fichier récupéré
    • via ta fonction, pour l'EAN en cours tu récupères la ligne correspondante dans ta bdd
    • tu modifies la ligne et tu passes à l'EAN suivant

    Et si ta bdd est une vraie bdd (qu'elle accepte des ordres SQL), alors la mise à jour est immédiate. Sinon si ta bdd n'est pas super lourde tu peux prendre l'option de la charger en RAM au début du programme et l'écrire quand le programme se termine (faut faire gaffe aux accès multi-concurrents => plusieurs programmes exécutés en parallèle par plusieurs users et ça c'est dans tes contraintes que tu n'as pas données)


    Un peu normal, internet ne contient que des choses écrites par d'autres et ce que les gens écrivent sont en général des concepts généraux, pas spécifiques comme le tien.
    Salut, merci pour la réponse. Le projet est pour Mai/Juin 2022 mais étant donnée que j'ai un rapport et une présentation a faire et que le projet m'a l'air assez complexe je préfère m'y prendre a l'avance

    Concernant la BDD je suis pas très a l'aise avec le SQL (je débute complet en programmation), et de toute façon notre site est un presta, j'ai donc accès a rien a part upload des fichiers CSV, et de toute façon la partie upload n'est pas un problème je la ferais avec l'extension chrome de Selenium comme je fais pour récupérer la bdd fournisseur.

    Ton raisonnement concernant la fonction me semble + que logique donc merci pour ça, mais tu aurais des pistes pour faire ça ? Je t'avoue que je suis un peu perdu avec toutes ces bibliothèques...

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par damien.1l2 Voir le message
    Salut, merci pour la réponse. Le projet est pour Mai/Juin 2022
    Retour vers le futur dans le passé ou bien Mai/Juin 2023???

    Citation Envoyé par damien.1l2 Voir le message
    et de toute façon notre site est un presta, j'ai donc accès a rien a part upload des fichiers CSV
    Ok, donc tu n'as pas accès à la bdd => on oublie. Il te faut créer un CSV afin de pouvoir l'uploader. Déjà toute première chose, aller lire cette page qui te montrera que le CSV c'est plus compliqué qu'on le croit et qu'utiliser une librairie pour le lire (ex csv) simplifie beaucoup le codage. La librairie csv de Python est super simple à utiliser: on ouvre le fichier, puis on le passe à la lib et ensuite toutes les lectures depuis la lib te retournent chaque ligne bien découpée.

    Ensuite, si le CSV n'est pas trop gros, la solution la plus simple est de le charger en mémoire, dans une structure Python équivalente. Si par exemple le CSV était "nom;prenom;age" alors une solution simple serait de créer un dictionnaire {"nom" : ..., "prenom" : ..., "age" : ...}. Puis le CSV contenant n lignes (donc n "nom;prenom;age"), suffit de stocker n dicos dans une liste
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    data=[
    	{"nom" : ..., "prenom" : ..., "age" : ...},
    	{"nom" : ..., "prenom" : ..., "age" : ...},
    	{"nom" : ..., "prenom" : ..., "age" : ...},
    ]
    De là, facile de modfier tel age de la ligne x => data[x]["age"]=.... Puis, une fois que tout a été modifié, on réécrit les infos dans le CSV.
    Et Pandas c'est juste une librairie qui offre des outils de manipulation et d'analyse de structures de ce type mais si tu n'as pas d'analyse à faire...

    Citation Envoyé par damien.1l2 Voir le message
    Ton raisonnement concernant la fonction me semble + que logique donc merci pour ça, mais tu aurais des pistes pour faire ça ? Je t'avoue que je suis un peu perdu avec toutes ces bibliothèques...
    Là on ne parle pas de bibliothèques mais simplement de connaissance Python.
    Exemple
    Code python : 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
    def maj(ean, item, value, data):
    	n=0
    	for d in data:
    		if d["ean"] == ean:
    			d[item]=value
    			n+=1
    		# if
    	# for
    	return n
    # maj()
     
    data=[
    	{"ean" : 0x01, "nom" : "ntoto", "prenom" : "ptoto", "age" : 123},
    	{"ean" : 0x02, "nom" : "ntata", "prenom" : "ptata", "age" : 456},
    	{"ean" : 0x03, "nom" : "ntutu", "prenom" : "ptutu", "age" : 789},
    ]
    print("avant", data)
     
    for (ean, item, value) in  (
    	(0x01, "nom", "xxx"),
    	(0x02, "age", 1456),
    	(0x03, "prenom", "yyy"),
    ):
    	n=maj(ean, item, value, data)
    	print("ean=%s, nb maj=%d" % (ean, n))
    # for
    print("après", data)

    L'important c'est de ne pas se préoccuper de "comment sont les infos au départ" mais de les intégrer dans un format que tu peux manipuler via Python.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    Citation Envoyé par damien.1l2 Voir le message
    le projet m'a l'air assez complexe je préfère m'y prendre a l'avance
    Désolé, mais c'est au contraire un projet très simple (surtout que download/upload est déjà réglé == pas de problème de droits à la connexion)
    Une maquette de juste la conversion c'est pas plus d'une demie journée ! (moins d'une heure pour quelqu'un qui connait bien python, pas besoin de maitriser pour cela sinon c'est moins de 10 minutes)

    Ici, j'ai l'impression que tu demandes de l'aide avant d'avoir commencé (le travail ou cours python). Avec un Bts, tu as déjà 1 an 1/2 de python ?


    ---------
    Pour le code de Sve@r, je ne suis pas fan (mais ok pour un premier jet)
    3000 boucle dans 3000 ...
    Je préfère construire une "liste" indexée du fournisseur et donc dans la bouche du commerçant avoir un accès direct.

  6. #6
    Membre habitué
    Homme Profil pro
    Alternant
    Inscrit en
    Décembre 2022
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Alternant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2022
    Messages : 12
    Par défaut
    Citation Envoyé par papajoker Voir le message
    Désolé, mais c'est au contraire un projet très simple (surtout que download/upload est déjà réglé == pas de problème de droits à la connexion)
    Une maquette de juste la conversion c'est pas plus d'une demie journée ! (moins d'une heure pour quelqu'un qui connait bien python, pas besoin de maitriser pour cela sinon c'est moins de 10 minutes)

    Ici, j'ai l'impression que tu demandes de l'aide avant d'avoir commencé (le travail ou cours python). Avec un Bts, tu as déjà 1 an 1/2 de python ?


    ---------
    Pour le code de Sve@r, je ne suis pas fan (mais ok pour un premier jet)
    3000 boucle dans 3000 ...
    Je préfère construire une "liste" indexée du fournisseur et donc dans la bouche du commerçant avoir un accès direct.
    Je suis dans un BTS Système Numérique, on vois de tout (C, C++, html css, php, sql, python, on fait aussi du réseau genre les couches osi, les ad et tout ce beau bordel...) et le problème de ce bts c'est qu'ont voit pleins de choses mais rien en profondeur donc même si j'ai déjà fais du python je suis jamais aller bien loin (dites vous qu'en cours les seuls bibliothèques qu'on a vu c'est "time" et "os" pour les clear.... + le fait que dans mon alternance a la base je ne fais pas du tout de code... Fi bref j'ai pas un gros niveau en python avec 1an 1/2 de formation c'est triste mais c'est comme ça.

    Pour revenir au sujet du post, ça fait 4 jours que je suis presque a temps pleins sur ce problème, j'ai vidé internet et j'ai lu toutes les docs que j'ai trouver, le problème c'est que j'ai un niveau catastrophique en Anglais donc compliquer pour comprendre les docs et je trouve juste pas ce que je cherche.

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par papajoker Voir le message
    Pour le code de Sve@r, je ne suis pas fan (mais ok pour un premier jet)
    3000 boucle dans 3000 ...
    Je préfère construire une "liste" indexée du fournisseur et donc dans la bouche du commerçant avoir un accès direct.
    Oui, c'était effectivement une façon de "lancer" le projet. Et effectivement on sent à 10km que c'est le truc créé sur un coin d'ordi sans réfléchir vraiment sans réfléchir du tout (j'ai mis l'EAN après mais au début je pensais faire une fonction de recherche sur une info diverse) mais si on y pense dès le départ il peut alors servir de clef de dico, style
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    data={
    	0x01 : {"nom" : "ntoto", "prenom" : "ptoto", "age" : 123},
    	0x02 : {"nom" : "ntata", "prenom" : "ptata", "age" : 456},
    	0x03 : {"nom" : "ntutu", "prenom" : "ptutu", "age" : 789},
    }

    Ensuite ben la modif est immédiate
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    print("avant", data)
    for (ean, item, value) in  (
    	(0x01, "nom", "xxx"),
    	(0x02, "age", 1456),
    	(0x03, "prenom", "yyy"),
    ):
    	data[ean][item]=value
    # for
    print("après", data)
    Mais s'il n'y a plus de difficulté il n'y a plus vraiment de plaisir...

    Citation Envoyé par damien.1l2 Voir le message
    (dites vous qu'en cours les seuls bibliothèques qu'on a vu c'est "time" et "os" pour les clear....
    Mouais, super. Avant de voir les bibliothèques il faudrait déjà voir le langage. Pour info, la notion de bibliothèque est abordée au chapitre 20 de mon tuto. C'est tout dire !!!

    Citation Envoyé par damien.1l2 Voir le message
    Pour revenir au sujet du post, ça fait 4 jours que je suis presque a temps pleins sur ce problème, j'ai vidé internet et j'ai lu toutes les docs que j'ai trouver, le problème c'est que j'ai un niveau catastrophique en Anglais donc compliquer pour comprendre les docs et je trouve juste pas ce que je cherche.
    Pareil, manque d'organisation. On veut apprendre un langage alors on apprend le langage. C'est peut-être du temps "consommé" mais ce ne sera certainement pas du temps "perdu". Et (accessoirement) mon tuto (disponible sur ce site) est écrit en français...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  8. #8
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    Une petite version (faite en 4 jours a temps plein ?) depuis mon speudo code (Avec un minimum de bibliothèque )

    Note: pas d'entete, mais de quoi jouer


    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
    import csv
     
    # créer des datas (SANS ENTETE)
     
    clients = [
        # id, nomm, quantité
        ["4,7190E+1", "truc", 45],
        ["4,7190E+2", "machin", 45],
        ["4,7190E+3", "bidule", 45],
    ]
     
    fournisseurs = [
        # id, nom, ?, quantité
        ["4,7190E+1", "truc", 0, 145],
        ["4,7190E+3", "bidule", 0, 199],
        ["9,9999E+9", "nouveau", 0, 277],
    ]
     
    with open('client.csv', 'w') as csvfile:
        writer = csv.writer(csvfile)
        writer.writerows(clients)
    with open('fournisseur.csv', 'w') as csvfile:
        writer = csv.writer(csvfile)
        writer.writerows(fournisseurs)
     
    ###### On charge les csv
     
    clients = []
    with open('client.csv') as f:
        reader = csv.reader(f)  # DictReader avec entete
        for row in reader:
            clients.append(row)
    fournisseurs = {}
    with open('fournisseur.csv') as f:
        reader = csv.reader(f)  # DictReader avec entete
        for row in reader:
            # TODO pour alléger la bete, on ne recupère que les colonnes id , nom et nombre
            fournisseurs[row[0]] = row  # [1:]
     
     
    ## debut de l'ENORME moulinette ...
     
    print("fournisseur:", fournisseurs, "\n")
    print("Actuel:", clients)
     
    for client in clients:
        id = client[0]
        print("\t", id, client, "update ?")
        fournisseur = fournisseurs.get(id)
        if not fournisseur:
            client[2] = 0
        else:
            client[2] = fournisseur[3]
    print("Nouveau: ", clients)
     
    # Un peu de logs sinon c'était trop simple
     
    fournisseurs_id = {i[0] for i in fournisseurs.items()}
    clients_id = {i[0] for i in clients}
    print()
    print ("LOG: pas disponible sur le site web ! :", fournisseurs_id - clients_id, "\tAjouter ces produits au catalogue ?")
    print ("LOG: existe plus ? :", clients_id - fournisseurs_id, "\tstock est passé à zéro")
     
    # on sauvegarde
     
    with open('client.actualisé.csv', 'w') as csvfile:
        writer = csv.writer(csvfile)
        writer.writerows(clients)

  9. #9
    Membre habitué
    Homme Profil pro
    Alternant
    Inscrit en
    Décembre 2022
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Alternant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2022
    Messages : 12
    Par défaut
    Je reviens vers vous pour un petit update :

    Cet aprem j'ai enfin réussi a charger les deux fichier CSV sous forme de tableau grâce a Pandas !
    Voici mon code :
    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
     
    import pandas as pd
    import numpy as np
     
    cata_fournisseur = pd.read_csv('C:\\Users\\Damien\\Downloads\\bdd_fournisseur.csv', encoding='ANSI', engine='python', sep=';')
    cata_entreprise = pd.read_csv('C:\\Users\\Damien\\Documents\\cata_entreprise.csv', encoding='ANSI', engine= 'python', sep=';')
     
    tab1 = np.array(cata_fournisseur)
    tab2 = np.array(cata_entreprise)
     
    df_fournisseur = pd.DataFrame(tab1, columns=['MARQUE','FAMILLE','PART_NUMBER','REF_fournisseur','EAN','REF_CONSTRUCTEUR','NOM','STOCK','PRIX_HT','PRIX_CLIENT','ECOTAX','COPIE_PRIVE','POID','IMAGE','CAT1','CAT2','CAT3'])
    df_entreprise = pd.DataFrame(tab2, columns=['EAN','NOM','STOCK','PRIX_HT','PRIX_MARGE','PRIX_TTC'])
     
    print (df_fournisseur)
    print (df_entreprise)
    Il me sort ça :
    Nom : tableau_projtech.png
Affichages : 408
Taille : 83,4 Ko

    Donc maintenant que j'ai 2 tableau sur mon code python, est-ce que la partie "Moulinette" du code proposé par papajoker (merci bcp) peut fonctionner ou être adapté ? (étant donné que tu a utilisé la biblio csv de base je sais pas si ça peut fonctionner.)

    Merci bcp a ceux qui prendront le temps de me repondre !

  10. #10
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    bonjour
    Citation Envoyé par damien.1l2 Voir le message
    J'ai fait beaucoup de recherche sur internet pour cette fameuse partie de l'algo mais je ne trouve rien
    Le plus simple serait quand même d'essayer, si tu as ce projet, c'est que tu connais python ? surtout en alternance
    Au moins un truc super simple (la base est petite, pas de risque de longueur)...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    pour chaque element dans tableau_local:
       id = element["EAN_CODE"]
       fournisseur = fournisseur_tableau.get(id)
       si rien :
          element.nombre = 0 
       sinon:
         element.nombre = fournisseur.nombre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Il faudrait aussi que si un produit existe dans le tableau du fournisseur mais n'existe pas dans notre tableau alors il le skip
    Ce que fait bien mon pseudo code MAIS pas ton schéma ! ->log

    ---------

    A voir si tu es un codeur panda ou non ?


    Citation Envoyé par Sve@r Voir le message
    Et si ta bdd est une vraie bdd (qu'elle accepte des ordres SQL), alors la mise à jour est immédiate
    Souvent on n'a pas accès directement à la bd sur le serveur web, c'est son schéma (et encore moins à celle du fournisseur). Donc ce genre de petite moulinette est un grand classique.
    Mais, si damien préfère sql à python, à la limite, il peut injecter les 2 fichiers dans sqlite pour faire le travail

  11. #11
    Membre habitué
    Homme Profil pro
    Alternant
    Inscrit en
    Décembre 2022
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Alternant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2022
    Messages : 12
    Par défaut
    Citation Envoyé par papajoker Voir le message
    bonjour


    Le plus simple serait quand même d'essayer, si tu as ce projet, c'est que tu connais python ? surtout en alternance
    Au moins un truc super simple (la base est petite, pas de risque de longueur)...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    pour chaque element dans tableau_local:
       id = element["EAN_CODE"]
       fournisseur = fournisseur_tableau.get(id)
       si rien :
          element.nombre = 0 
       sinon:
         element.nombre = fournisseur.nombre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Il faudrait aussi que si un produit existe dans le tableau du fournisseur mais n'existe pas dans notre tableau alors il le skip
    Ce que fait bien mon pseudo code MAIS pas ton schéma ! ->log

    ---------

    A voir si tu es un codeur panda ou non ?



    Souvent on n'a pas accès directement à la bd sur le serveur web, c'est son schéma (et encore moins à celle du fournisseur). Donc ce genre de petite moulinette est un grand classique.
    Mais, si damien préfère sql à python, à la limite, il peut injecter les 2 fichiers dans sqlite pour faire le travail
    Salut, merci a toi aussi pour ta réponse, j'ai commencer a regarder Pandas mais j'arrive a pas faire grand chose avec malheureusement, et effectivement je n'ai pas accès a la bdd SQL.
    Et pour l'instant je ne concentre absolument pas sur les logs, je ferais ça quand j'aurais un code un minimum fonctionnel

  12. #12
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    Citation Envoyé par papajoker Voir le message
    Mais, si damien préfère sql à python, à la limite, il peut injecter les 2 fichiers dans sqlite pour faire le travail
    En fait, ici tu as fait la même chose :
    injecter tes fichiers dans pandas, maintenant pandas a sa propre logique (est plus une base de donnée que du python pur), il te faut donc connaitre pandas...


    -------
    EDIT
    Nouvelle version (la plus courte) de ma moulinette (plus proche de Sve@r)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for client in clients:
        client[2] = fournisseurs.get(client[0], [0]*100)[3]
    Mais bon pour faire un projet de fin d'année c'est pas terrible (sans doute pas cette partie la plus compliquée)

    NOTE:
    code pour maquette only...
    Il faut blinder au maximum l'application et tester que la "quantité" fournisseur est un nombre valide est un minimum

  13. #13
    Membre habitué
    Homme Profil pro
    Alternant
    Inscrit en
    Décembre 2022
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Alternant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2022
    Messages : 12
    Par défaut
    Bonjour ! Je reviens vers vous car je bloque vraiment et ça commence a me faire péter un câble, entre temps je me suis beaucoup documenté sur la doc de python et la doc de pandas. Mais je n'arrive vraiment pas a faire la comparaison, actuellement j'ai deux dataframes pandas qui sortent comme ceci :
    Nom : Capture d’écran 2022-12-20 145508.png
Affichages : 372
Taille : 25,6 Ko
    Aprés d'inombrables essaies je n'arrive pas a avoir un résultat satisfaisant, si quelqu'un peut m'aider je ne suis pas contre ^^

  14. #14
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Citation Envoyé par damien.1l2 Voir le message
    Mais je n'arrive vraiment pas a faire la comparaison, actuellement j'ai deux dataframes pandas qui
    Si vous n'arrivez pas à faire ça avec le Python que vous connaissez, pas la peine d'essayer de le faire avec Pandas car il faut savoir programmer pour l'utiliser. En plus papajoker, vous a donné un code que vous pourriez essayer de comprendre/adapter.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  15. #15
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    pourquoi avoir choisi pandas ? (si c'est la vitesse, existe aussi www.pola.rs qui semble encore plus rapide mais avec autre syntaxe...)
    on choisit une bibliothèque externe pour une bonne raison; et l'utiliser va devoir te faire apprendre python ET pandas. Cette surcharge de travail doit avoir une bonne raison !

    ps: non merci pour les copies écran, ce n'est que du texte et existe le copier/ coller

  16. #16
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par damien.1l2 Voir le message
    Mais je n'arrive vraiment pas a faire la comparaison, actuellement j'ai deux dataframes pandas qui sortent comme ceci
    Aprés d'inombrables essaies je n'arrive pas a avoir un résultat satisfaisant
    Ouais bon si tu ne montres pas tes codes... Et puis tu veux comparer mais ensuite faire quoi? Exemple
    dataframe1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    EAN	Stock	PrixHT
    123	10	12.5
    456	15	22.5
    789	20	32.5
    dataframe2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    EAN	Stock	PrixHT
    321	25	42.5
    456	30	52.5
    987	35	62.5
    Donc ok admettons que tu finisses par trouver les deux lignes "EAN=456". Et ensuite tu fais quoi avec d'un côté stock=15 et de l'autre stock=30 (et pareil avec le prix)??????

    Accessoirement as-tu remarqué que dans l'un des deux dataframes le EAN est en float tandis que dans l'autre il est en int? C'est quoi?? Tu trouvais le truc trop simple et tu t'es dit "nan je mets du float pour corser" ???

    Et +1 à la remarque de papajoker. Les copies d'écran c'est indiqué dans les règles de leur préférer la copie des datas dans le forum (tu t'imagines qu'on va se farcir manuellement la réécriture de tes résultats pour ensuite essayer de coder la comparaison ???)
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  17. #17
    Membre habitué
    Homme Profil pro
    Alternant
    Inscrit en
    Décembre 2022
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Alternant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2022
    Messages : 12
    Par défaut
    Re, je peut pas vous filer mon code car il y a les codes de connexion au site fournisseur de mon entreprise, le nom de l'entreprise, le nom du fournisseur... fin bref des infos que je peut pas leak sur internet.
    J'ai réussi a faire la comparaison, j'ai donc 2 tableaux, le premier sur lequel il y a tous les produits que nous nous avons mais que le fournisseur n'a plus, la quantité de tous les produits est donc passé a zéro.
    Le deuxième tableau contient tous les produits qu'il faut mettre a jour mais avec les prix en hors taxe, ma difficulté actuelle est donc de mettre notre règle de prix (marge + tva) sur tous les produits, j'ai cherché sur internet mais je n'ai rien trouvé, donc si quelqu'un ici sait comment faire une boucle while qui execute une fonction avec un if pour chaque produit je suis bien évidemment pas contre !
    Ensuite pour l'histoire des int et des float, c'est juste pas ma faute. Le premier se met tout seul en int et le deuxième se met tout seul en float, j'ai absolument pas compris pourquoi et quand j'essaye de mettre le deuxieme en int ou en int64 il me sort une erreur bref il veux pas. J'avais trouver un seul moyen de tout passer en int c'était avec "keep_default_na=False" dans la ligne d'import du csv, mais si je met ça, la comparaison avec pd.merge ne fonctionne juste pas. Donc si quelqu'un sait comment passer cette fameuse colonne EAN du tableau 2 en int je suis pas contre non plus ! Enfin bref, je vous met les 2 tableaux que j'ai actuellement et le code de la règle de prix ! Merci d'avance si vous prenez le temps de me répondre.

    Voici le code de la règle de prix :

    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
     
    def reglePrix():
        nombre = 0
        if nombre >= 0 and nombre < 3.3 :
            nombre1 = (nombre + 8.25) * 1.2
        if nombre >= 3.3 and nombre < 4 :
            nombre1 = (nombre + 9.92) * 1.2
        if nombre >= 4 and nombre < 8 :
            nombre1 = (nombre * 2) * 1.2
        if nombre >= 8 and nombre < 10 :
            nombre1 = (nombre * 1.8) * 1.2
        if nombre >= 10 and nombre < 15 :
            nombre1 = (nombre * 1.7) * 1.2
        if nombre >= 15 and nombre < 20 :
            nombre1 = (nombre * 1.6) * 1.2  
        if nombre >= 20 and nombre < 30 :
            nombre1 = (nombre * 1.5) * 1.2 
        if nombre >= 30 and nombre < 50 :
            nombre1 = (nombre * 1.4) * 1.2
        if nombre >= 50 and nombre < 75 :
            nombre1 = (nombre * 1.3) * 1.2
        if nombre >= 75 and nombre < 200 :
            nombre1 = (nombre * 1.25) * 1.2
        if nombre >= 200 and nombre < 375 :
            nombre1 = (nombre * 1.2) * 1.2
        if nombre >= 375 and nombre < 750 :
            nombre1 = (nombre * 1.18) * 1.2
        if nombre >= 750 and nombre < 1000 :
            nombre1 = (nombre * 1.16) * 1.2
        if nombre >= 1000 and nombre < 1400 :
            nombre1 = (nombre * 1.15) * 1.2
        if nombre >= 1400 and nombre < 5000 :
            nombre1 = (nombre * 1.12) * 1.2
        if nombre >= 5000 :
            nombre1 = (nombre * 1.10) * 1.2
    Et voici les tableaux que j'ai actuellement :

    Nom : avnnnc.png
Affichages : 362
Taille : 26,1 Ko

Discussions similaires

  1. [PowerShell] Mettre à jour son fichier CSV d'import
    Par Overwatch dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 14/04/2016, 10h18
  2. [XL-2010] Mettre a jour un fichier Excel a partir d un autre
    Par sherwoodd dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/02/2016, 02h13
  3. Réponses: 1
    Dernier message: 13/01/2011, 11h45
  4. mettre a jour le fichier de mapping hibernate
    Par solawe dans le forum Hibernate
    Réponses: 3
    Dernier message: 13/12/2006, 21h14
  5. Mettre à jour un fichier en fonction d'un autre
    Par k6971 dans le forum Langage
    Réponses: 4
    Dernier message: 07/12/2006, 14h08

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