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 :

Script Python, traitement fichier csv


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Electromécanique
    Inscrit en
    Avril 2024
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Electromécanique
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Avril 2024
    Messages : 19
    Par défaut Script Python, traitement fichier csv
    Bonjour,

    Je suis novice en Python, je connais juste les bases mais j'aurai besoin de créer un script qui traite un fichier csv avec séparateur "," pour le transformer en xls ou google sheet comportant les 2 colonnes initiales du csv puis qu'il retire dans la 2e colonne "kW" et qui calcule dans une 3e colonne dans la cellule 2 la moyenne des chiffres de la 2e colonne.

    Fichier de base (exemple):

    "Date", "Puissance"

    2024-01-12 10:00:00,93.3 kW

    2024-01-12 13:00:00,92.8 kW

    2024-01-12 16:00:00,92.2 kW

    2024-01-12 19:00:00,90.4 kW

    2024-01-12 22:00:00,89.6 kW

    2024-01-13 01:00:00,89.7 kW

    Peut-on m'aider?

    Complément: Peut-on passer au script un paramètre (le nom du fichier) exemple sub1.csv, sub2.csv?

    Merci beaucoup

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 603
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Février 2003
    Messages : 1 603
    Par défaut
    Bonjour.

    Pour générer votre csv, regardez la doc de csv.DictWriter.
    Oups, j'avions mal lu

    Pour lire votre csv, regardez la doc de csv.DictReader.

    Supprimer " kW", si vous avez les bases en Python, absolument rien de sorcier.

    Idem pour générer votre 3ème valeur.

    Pour passer des arguments à votre script Python, voir https://python.developpez.com/cours/..._arguments.php. Là encore, rien de méchant.

    Et enfin, pour faire un fichier Excel par exemple, vous pouvez utiliser openpyxl.

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    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 832
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Dingobec Voir le message
    et qui calcule dans une 3e colonne dans la cellule 2 la moyenne des chiffres de la 2e colonne.
    Tout lire (les lignes ayant une valeur) en additionnant les valeurs puis ensuite écrire la ligne de titre en rajoutant en 2° colonne la moyenne ainsi calculée.

    Citation Envoyé par Dingobec Voir le message
    Complément: Peut-on passer au script un paramètre (le nom du fichier) exemple sub1.csv, sub2.csv?
    Tout à fait. C'est ce qu'on nomme les "arguments d'un programme".
    Il n'y a rien à faire, c'est automatique. Dès qu'on met des paramètres à un script, celui-ci les reçoit automatiquement. Tout ce qui reste à faire est de savoir où ils sont pour pouvoir aller les chercher et les récupérer.
    Ils sont dans la liste sys.argv. Donc il est nécessaire d'importer le module "sys" pour cela (import sys) puis une fois cette instruction posée, les arguments sont récupérables via sys.argv[1] (le premier nom passé à l'appel), sys.argv[2] (le second nom passé à l'appel), etc. Et sys.argv[0] contient le nom du programme tel qu'il a été appelé.

    Citation Envoyé par Arioch Voir le message
    Pour lire votre csv, regardez la doc de csv.DictReader
    (goûts et couleurs) j'aurais plutôt parlé de csv.reader peut-être plus simple pour un débutant (est-il à l'aise avec les dictionnaires ? un dictionnaire est-il vraiment utile ici ? etc).
    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]

  4. #4
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 603
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Février 2003
    Messages : 1 603
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    (goûts et couleurs) j'aurais plutôt parlé de csv.reader peut-être plus simple pour un débutant (est-il à l'aise avec les dictionnaires ? un dictionnaire est-il vraiment utile ici ? etc).
    Partant du principe que le PO a connaissance des bases en Python, je pars du principe que les listes, dictionnaires, tuples et leurs amis sont des notions connues. Et du coup, gérer dans un dictionnaire les données contenues dans le fichier csv fourni en entrée, moi ça me parle bien

    Mais oui, csv.reader peut tout aussi bien faire l'affaire.

  5. #5
    Membre averti
    Homme Profil pro
    Electromécanique
    Inscrit en
    Avril 2024
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Electromécanique
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Avril 2024
    Messages : 19
    Par défaut
    Heu... comme dit je suis vraiment à mes premiers balbutiements en python que je découvre, par contre, je peux vous designer, concevoir et mettre en exploitation un datacenter Tiers 3 ou 4 les yeux fermés

    Donc au vue de tous vos commentaires, si je veux maintenant consolider, si on reprend mon exemple, sub1 + sub 2 dans un troisième fichier avec le même format, j'ouvre en lecture les 2 fichiers et en écriture un 3e fichier puis j'additionne ligne par ligne les éléments des 2 fichiers pour les envoyer dans le 3e? Est-ce que csv.reader fonctionne aussi pour ça ou il y a une meilleure méthode....On ne rigole pas svp

    Merci

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    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 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Dingobec Voir le message
    On ne rigole pas svp
    Non, on ne se moque jamais d'un débutant qui a bien compris que c'est à lui de bosser. Mais là en revanche il y a un souci soit de compréhension, soit de version.
    Dans ta première demande, j'avais compris (et à mon avis les autres aussi) que tu voulais prendre UN csv et le traiter, rajouter la moyenne, etc. Puis ensuite passer au suivant, le traiter etc.

    Maintenant il est question de prendre DEUX fichiers, les additionner (ce qui n'est alors plus du tout une moyenne) et créer un 3° fichier contenant la somme des deux.

    Fatalement les deux problèmes ne sont pas équivalents et ne se solutionneront pas de la même façon...

    Sinon pour répondre à ta question, csv.reader a juste pour but de lire un csv, rien de plus. Ce que tu fais de ce qu'il lit, c'est ton problème. Il n'ira jamais additionner, comparer, moyenner quoi que ce soit. Lui il lit et te donne ensuite la ligne lue découpée bien proprement. Et accessoirement si tu veux ensuite écrire ton résultat dans un csv (le même ou un autre) il te faut alors là passer par csv.writer (ou csv.DictWriter pour faire plaisir à Arioch ). Oui c'est logique, read(er) c'est pour read (lire) donc pour écrire (write) c'est (write)r
    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]

  7. #7
    Membre averti
    Homme Profil pro
    Electromécanique
    Inscrit en
    Avril 2024
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Electromécanique
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Avril 2024
    Messages : 19
    Par défaut
    Merci pour la réponse précise et les infos.

    En fait concernant le premier point c'est OK, ça fonctionne bien et j'ai mes 2 premiers fichiers sub1 et sub2 de format identique
    Donc j'ai sub1 (une armoire électrique) et sub2 (une autre armoire électrique). La puissance totale de ma, disons sous station, devient donc sub1 et sub2 en un fichier sub1_sub2.xls
    Au final j'aurai bien 3 fichiers sub1, sub2 et sub1_sub2.
    Sous excel ils appellent ça "consolider", quelle serait donc la meilleure méthode dans un script python?

    Merci,

  8. #8
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    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 : 4 062
    Par défaut
    Citation Envoyé par Dingobec
    Elle est tout à fait identique à la précédente.
    Non,

    Citation Envoyé par traceback
    File "c:\Test\toto.py", line 1, in <module>
    Ce qui permet de vérifier que le changement de fichier a bien été fait.

    Tu as d'autres fichiers python dans ton projet ou c'est le seul ?

    Si c'est le seul, tu devrais peut-être réinstaller pandas...

  9. #9
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    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 : 4 062
    Par défaut
    Bonjour,

    Citation Envoyé par Dingobec
    qui calcule dans une 3e colonne dans la cellule 2 la moyenne des chiffres de la 2e colonne.
    EDIT: Précisé dans les messages suivants

    C'est quoi cette moyenne ? Une moyenne cumulative ?

    Avec pandas c'est rapide, mais pas pour les débutants, donc je le place juste pour la curiosité

    EDIT: Code modifié selon précision du PO.

    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
    import pandas as pd
     
    chemin_csv = 'src/test.txt'
    chemin_xls = 'src/test.xlsx'
     
    df = pd.read_csv(chemin_csv, sep=',')
     
    df['Puissance'] = df['Puissance'].str.replace(' kW', '').astype(float)
     
    moyenne_puissance = df['Puissance'].mean()
     
    df['Moyenne'] = pd.NA
     
    df.loc[0, 'Moyenne'] = moyenne_puissance
     
    df.to_excel(chemin_xls, index=False, engine='openpyxl')

    Nom : Capture d’écran_2024-04-11_15-13-31.png
Affichages : 349
Taille : 10,6 Ko

  10. #10
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    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 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    C'est quoi cette moyenne ? Une moyenne cumulative ?
    Moi aussi j'ai pensé un peu à un truc dans le genre... puis j'ai révisé cette opinion en considérant plutôt qu'il voulait parler de la 3° colonne de la ligne de titre. Bon bref il nous dira mieux ce qu'il en est.
    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]

  11. #11
    Membre averti
    Homme Profil pro
    Electromécanique
    Inscrit en
    Avril 2024
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Electromécanique
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Avril 2024
    Messages : 19
    Par défaut
    Comme je ne suis pas du tout du domaine et plutôt un vieux routard de l'électromécanique avec peu de connaissance en développement, les exemples vont m'aider.
    En fait dans la 3e colonne que j'ajoute au fichier j'aurai juste une case qui contiendrait la moyenne de tous les éléments de la 2e colonne

    Merci de votre super aide,

  12. #12
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    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 : 4 062
    Par défaut
    Citation Envoyé par Dingobec
    j'ai remplacer le nom du fichier script par toto au lieu de csv mais cela fait la même erreur que précédemment.
    Tu ne peux pas avoir le même message d'erreur si tu as modifié le nom de ton module csv.py

  13. #13
    Membre averti
    Homme Profil pro
    Electromécanique
    Inscrit en
    Avril 2024
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Electromécanique
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Avril 2024
    Messages : 19
    Par défaut
    Bonjour,

    Voici l'erreur reçue:
    c:\Test>python toto.py test
    Traceback (most recent call last):
    File "c:\Test\toto.py", line 1, in <module>
    import pandas as pd
    File "C:\Users\20008135\AppData\Local\Programs\Python\Python312\Lib\site-packages\pandas\__init__.py", line 62, in <module>
    from pandas.core.api import (
    File "C:\Users\20008135\AppData\Local\Programs\Python\Python312\Lib\site-packages\pandas\core\api.py", line 28, in <module>
    from pandas.core.arrays import Categorical
    File "C:\Users\20008135\AppData\Local\Programs\Python\Python312\Lib\site-packages\pandas\core\arrays\__init__.py", line 8, in <module>
    from pandas.core.arrays.categorical import Categorical
    File "C:\Users\20008135\AppData\Local\Programs\Python\Python312\Lib\site-packages\pandas\core\arrays\categorical.py", line 3, in <module>
    from csv import QUOTE_NONNUMERIC
    File "c:\Test\csv.py", line 7, in <module>
    df = pd.read_csv(chemin_csv, sep=',')
    ^^^^^^^^^^^
    AttributeError: partially initialized module 'pandas' has no attribute 'read_csv' (most likely due to a circular import)

  14. #14
    Membre averti
    Homme Profil pro
    Electromécanique
    Inscrit en
    Avril 2024
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Electromécanique
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Avril 2024
    Messages : 19
    Par défaut
    Elle est tout à fait identique à la précédente.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PYTHON 3.6] - Traitement Fichier CSV
    Par T16r0u dans le forum Général Python
    Réponses: 1
    Dernier message: 24/03/2021, 15h31
  2. Traitement fichier CSV et recherche de sous-chaines
    Par j.lasnier dans le forum ASP.NET
    Réponses: 2
    Dernier message: 23/03/2010, 11h31
  3. python et fichier .CSV
    Par billyrose dans le forum Général Python
    Réponses: 7
    Dernier message: 22/07/2008, 07h53
  4. Traitement fichiers csv
    Par athra dans le forum Forms
    Réponses: 0
    Dernier message: 20/06/2008, 11h17

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