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 :

Tracer de courbe à partir d'un fichier texte


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club Avatar de Even XXI
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2021
    Messages : 3
    Par défaut Tracer de courbe à partir d'un fichier texte
    Bonjour,

    Je cherche à tracer différentes courbes à partir d'un fichier texte de cette forme :

    [QJ&100&10000][QA&0][GG&100&10000][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0.171][GI&0][QA&0.294][GI&0][QA&0.485][GI&0][QA&0.751][GI&0][QA&0.997][GI&0][QA&1.408][GI&0][QA&1.740][GI&0][QA&1.979][GI&0][QA&2.089][GI&0][QA&2.229][GI&0][QA&2.557][GI&0][QA&2.825][GI&0][QA&2.964][GI&0][QA&3.196][GI&0][QA&3.536][GI&0][QA&3.861][GI&0][QA&3.854][GI&0][QA&3.975][GI&0][QA&4.014][GI&0][QA&3.693][GI&0][QA&1.709][GI&0][QA&0.195][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][HA&183&21&11&14&13&37&1&128&32768&4.080&4&600&0&0&0&0&0][QK][GH][WJ&16][WJ&16]

    Les valeurs qui m'intéressent sont : [GI& valeur ] et [QA& valeur]. Ce sont des valeurs de couple et d'angle mesurées toutes les 100ms, et j'aimerais tracer l'évolution du couple et de l'angle en fonction du temps (GI étant l'angle en degré et QA le couple en N.m). Tous les autres informations ne sont pas pertinentes pour mon projet.

    J'ai pas mal épluché les forums et j'ai cru comprendre que tracer des courbes à partir de fichier texte était un classique. Mais, à chaque fois, les personnes ont des fichiers texte où ils ont juste une seule valeur par ligne et utilisent des codes inapproprié dans mon cas (car dans mon cas toutes les valeurs sont sur la même ligne).

    Avez-vous une solution pour mon cas ? Merci d'avance

    PS : je suis plus que débutant sur python donc je suis assoiffé d'explication

  2. #2
    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
    Salut,

    Déjà pour tracer une courbe, il faut une bibliothèque graphique ou par exemple utiliser matplotlib.
    Et comme les courbes sont représentées à partir d'une suite de points xi, yi, il va falloir mettre en forme vos données!

    Pour les xi c'est facile puisqu'ils sont équidistants d'une longueur représentant 100ms.
    Reste à découper le fichier texte suivant les [] (vous pouvez y aller à coup de .find), et pour un QJ&100&10000 extraire 'QJ', 100, 10000 (ce qui se fait avec .split).... et construire les différents yi

    Ce sont des opérations de base sur les chaînes de caractères qui n'ont rien de bien compliqué.

    note: quand on sait un peu programmer, on peut envisager de faire cela avec des expressions régulières mais vaut mieux commencer par le commencement.

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

  3. #3
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 219
    Par défaut
    hello,
    Citation Envoyé par wiztricks Voir le message
    note: quand on sait un peu programmer, on peut envisager de faire cela avec des expressions régulières mais vaut mieux commencer par le commencement.
    - W
    A titre indicatif avec une expression régulière on arrive à obtenir la liste des valeurs de QA GI sous forme de liste de tuples en 1 ligne de code.
    Et pour le tracé de courbes, effectivement matplotlib est la solution idéale.
    Voici ce que l'on peut obtenir avec matplotlib :
    Nom : matplotlib.PNG
Affichages : 226
Taille : 17,4 Ko

    Ami calmant, J.P

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 833
    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 833
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Even XXI Voir le message
    J'ai pas mal épluché les forums et j'ai cru comprendre que tracer des courbes à partir de fichier texte était un classique. Mais, à chaque fois, les personnes ont des fichiers texte où ils ont juste une seule valeur par ligne et utilisent des codes inapproprié dans mon cas (car dans mon cas toutes les valeurs sont sur la même ligne).
    Adapter un code ayant une valeur par ligne à un code acceptant "toutes les valeurs sur la même ligne" ; ou bien prendre toutes les valeurs de la ligne et les éclater de façon à n'avoir qu'une valeur par ligne n'est pas super compliqué (dans ce dernier cas il faut quand-même avoir un séparateur de valeurs)...
    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
    Candidat au Club Avatar de Even XXI
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2021
    Messages : 3
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Adapter un code ayant une valeur par ligne à un code acceptant "toutes les valeurs sur la même ligne"
    Ma difficulté et que je ne sais pas quoi mettre dans ma boucle, dans tous les exemples que j'ai vu, les personnes font un "for ligne in *nom du fichier*:". Je ne sais pas comment construire ma boucle

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Salut,

    Oui ça c'est une boucle pour lire le fichier ligne par ligne. C'est vrai que dans ton cas c'est plus compliqué.

    Mais en fait la difficulté ne vient pas de la lecture du fichier, tu pourrais d'ailleurs laisser cela à plus tard et travailler sur une chaine de caractère et là le vrai problème c'est comment extraire les données de cette chaine. Pour cela tu as le message de wiztricks qui te donne une explication.

    Procédè par étape : pour commencer tu vois bien qu'il va falloir récupérer toutes les chaines qui se trouvent entre les crochets [], non ? Alors essaye de faire un code qui se contente dans un premier temps de récupérer toutes ces chaines et de les afficher pour vérifier que cela fonctionne bien.


    PS: L'exemple que tu as donné est-il correcte ? Je vois qu'il y a 81 fois la chaine GI&0 donc la valeur de l'angle ce serait toujours 0 ?

  7. #7
    Candidat au Club Avatar de Even XXI
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2021
    Messages : 3
    Par défaut
    Oui c'est normal si l'angle est nul tout le temps, c'est le fichier d'un essai particulier. Dans d'autre essais l'angle varie, c'est juste que je n'avais que ce fichier sous la main.

  8. #8
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Citation Envoyé par Even XXI Voir le message
    Oui c'est normal si l'angle est nul tout le temps, c'est le fichier d'un essai particulier. Dans d'autre essais l'angle varie, c'est juste que je n'avais que ce fichier sous la main.
    Ok. Alors tu peux travailler sur cette exemple en utilisant la chaine directement dans ton code pour laisser à plus tard la lecture du fichier.

    Par exemple en faisant cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data="[QJ&100&10000][QA&0][GG&100&10000][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0.171][GI&0][QA&0.294][GI&0][QA&0.485][GI&0][QA&0.751][GI&0][QA&0.997][GI&0][QA&1.408][GI&0][QA&1.740][GI&0][QA&1.979][GI&0][QA&2.089][GI&0][QA&2.229][GI&0][QA&2.557][GI&0][QA&2.825][GI&0][QA&2.964][GI&0][QA&3.196][GI&0][QA&3.536][GI&0][QA&3.861][GI&0][QA&3.854][GI&0][QA&3.975][GI&0][QA&4.014][GI&0][QA&3.693][GI&0][QA&1.709][GI&0][QA&0.195][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][QA&0][GI&0][HA&183&21&11&14&13&37&1&128&32768&4.080&4&600&0&0&0&0&0][QK][GH][WJ&16][WJ&16]"
    Du coup tu peux travailler sur la chaine data.

  9. #9
    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 Even XXI Voir le message
    Ma difficulté et que je ne sais pas quoi mettre dans ma boucle, dans tous les exemples que j'ai vu, les personnes font un "for ligne in *nom du fichier*:". Je ne sais pas comment construire ma boucle
    Lancez la console Python et jouez avec les données:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> data = "[QJ&100&10000][QA&0][GG&100&10000][GI&0][QA&0]"
    >>> data.split(']')
    ['[QJ&100&10000', '[QA&0', '[GG&100&10000', '[GI&0', '[QA&0', '']
    >>>
    donc si on veut faire des itérations sur chaque bout:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >> for e in data.split(']'): print(e[1:])
    ...
    QJ&100&10000
    QA&0
    GG&100&10000
    GI&0
    QA&0
     
    >>>
    Reste a découper suivant '&'.


    Après si vous ne vous en sortez pas, ouvrir un tuto. et apprendre ou revoir les bases n'est pas quelque chose qu'on peut faire pour vous.

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

  10. #10
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Ah le data.split(']') c'est exactement ce que j'ai fait... C'est une bonne astuce.

    Après pour récupérer les valeurs QA et GI je cherche les chaines "[QA" et "[GI"...

  11. #11
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 833
    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 833
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Even XXI Voir le message
    dans tous les exemples que j'ai vu, les personnes font un "for ligne in *nom du fichier*:". Je ne sais pas comment construire ma boucle
    Exact. Le for ligne in fic itère sur chaque ligne qui devient une valeur à utiliser. Dans ton cas, comme j'ai dit, il faut que la string contienne un élément identifiable permettant de séparer les valeurs afin là aussi de pouvoir ensuite itérer dessus pour les prendre une à une.
    Donc il te faut d'abord travailler (tester) une chaine d'exemple avant de pouvoir appliquer ta solution à tes vraies valeurs.

    Exemple simple
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> s="[123][456][789]"
    >>> s.replace("[", " ").replace("]", " ").strip().split()
    ['123', '456', '789']
    >>> for x in s.replace("[", " ").replace("]", " ").strip().split():
    ...     print(x)
    ... 
    123
    456
    789

    Et voilà, t'as ton itération.

    Après on peut utiliser le module "re" pour splitter sur caractères multiples mais déjà comme ça...
    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]

Discussions similaires

  1. Réponses: 8
    Dernier message: 14/04/2010, 14h08
  2. Tracer une courbe à partir d'un fichier .csv
    Par dzonaser dans le forum MATLAB
    Réponses: 2
    Dernier message: 25/10/2008, 14h48
  3. tracer une courbe à partir d'un fichier txt
    Par defcom60 dans le forum Calcul scientifique
    Réponses: 54
    Dernier message: 18/07/2008, 10h16
  4. tracer une courbe à partir d'un fichier texte
    Par Kemanke dans le forum MFC
    Réponses: 12
    Dernier message: 18/07/2007, 10h51

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