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 :

Lire des données en temps réél + graphiques


Sujet :

Python

  1. #1
    Membre du Club
    Inscrit en
    Mai 2011
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 72
    Points : 49
    Points
    49
    Par défaut Lire des données en temps réél + graphiques
    Bonjour à tous !

    Je cherche à faire un script me permettant de lire des chiffres (écrit en continu dans un fichier .txt via un logiciel tiers) et de les tracer sur un axe (x,y). Pour les graphs, j'utilise drawnow, ça marche plutôt bien.
    Cependant je rencontre un problème lorsque l'écriture de ces chiffres dans le fichier .txt est en pause pour x raisons. Je ne parviens pas à faire une pause dans mon script, puis de continuer la lecture du fichiers lorsque de nouveaux chiffres apparaissent.

    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
    from pylab import arange, plt
    from drawnow import drawnow
    import numpy as np
    import time
     
    plt.ion() # enable interactivity
    fig=plt.figure() # make a figure
     
    def makeFig():
        plt.scatter(x,y) # I think you meant this
     
    x=list()
    y=list()
     
    f = open('data.txt', 'r+')
    line=f.readline()
    last_pos = f.tell()
    print "derniere pos", last_pos
    i=0
     
    while True:
            if line:
                    print(line)
                    x.append(i)
                    y.append(line)
                    i=i+1
                    print i
                    print "boucle last pos",last_pos
                    drawnow(makeFig)
                    last_pos=last_pos+1
                    line=f.readline(last_pos)
            else:
                    time.sleep(1)
                    f.flush()
                    f.close()
                    f = open('data.txt', 'r+')
                    print(last_pos), ">last pos"
                    line=f.readline(last_pos)
    Ici :
    -lecture des données et creation graph +
    -si pas de ligne avec des chiffres alors
    -pause d'une seconde
    -reprise de la lecture depuis la dernière position

    Avec ce script, la lecture reprend depuis le début après la pause de 1s.

    D’où provient le soucis ?

    Merci par avance pour toute aide

    Jonathan

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Prenez un fichier "toto.txt", qui contient:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    line 0
    line 1
    line 2
    line 3
    Puis vous tapez à la console Python:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> f = open('toto.txt', 'r')
    >>> line = f.readline()
    >>> line
    'line 0\n'
    >>> last_pos = f.tell()
    >>> last_pos
    8
    puis on mime ce que fait votre code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> f.close()
    >>> f = open('toto.txt', 'r')
    >>> line = f.readline(last_pos)
    >>> line
    'line 0\n'
    .readline(last_pos) lit la ligne courante jusqu'à last_pos bytes alors que vous vouliez lire "après" last_pos.
    Pour faire çà, il fait passer last_pos a .seek et écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> f.close()
    >>> f = open('lines.txt', 'r')
    >>> f.seek(last_pos)
    8
    >>> line = f.readline()
    >>> line
    'line 1\n'
    >>>
    Et vous voyez qu'avant de "coder" et constater que çà ne fonctionne pas, vous pouvez voir ce que çà fait directement à la console.

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

  3. #3
    Membre du Club
    Inscrit en
    Mai 2011
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 72
    Points : 49
    Points
    49
    Par défaut
    Merci !
    Résolu

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

Discussions similaires

  1. Comment lire des données d'un fichier XML à partir de java
    Par kamaldev dans le forum Format d'échange (XML, JSON...)
    Réponses: 11
    Dernier message: 25/08/2006, 19h29
  2. [Excel] Lire des données de excel avec php
    Par Eisy dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 09/03/2006, 17h00
  3. Réponses: 7
    Dernier message: 27/01/2006, 01h44
  4. Générer des données sous forme de graphiques (comme excel)
    Par matterazzo dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 26/10/2005, 19h21
  5. CFile : comment lire des données
    Par romeo9423 dans le forum MFC
    Réponses: 3
    Dernier message: 25/10/2004, 19h10

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