Extraire données Python
Répondre à la discussion
Affichage des résultats 1 à 17 sur 17

Extraire données Python



  1. #1
    Micki2a

    Extraire données Python


    ------

    Bonjour,

    J'ai un fichier texte remplis de données du genre: 00:01.3,5

    Ce qui signifie qu'à 1 seconde, la valeur valait 3.5.

    Et je souhaite extraire ces données en Python pour faire un plot de la valeur en fonction du temps.

    Je vous remercie d'avance.

    -----

  2. #2
    fred1599

    Re : Extraire données Python

    C'est un travail pour les regex

    Code:
    >>> import re
    >>> s = "00:01.3,5"
    >>> _, seconde, valeur = re.findall('(\d[,]*\d)', s)
    >>> seconde
    '01'
    >>> valeur
    '3,5'

  3. #3
    fred1599

    Re : Extraire données Python

    Pour transformer ces valeurs proprement

    Code:
    >>> from locale import *
    >>> setlocale(LC_NUMERIC, '')
    'fr_FR.UTF-8'
    >>> _, seconde, valeur = map(atof, re.findall('(\d[,]*\d)', s))
    >>> seconde
    1.0
    >>> valeur
    3.5

  4. #4
    Micki2a

    Re : Extraire données Python

    Citation Envoyé par fred1599 Voir le message
    C'est un travail pour les regex

    Code:
    >>> import re
    >>> s = "00:01.3,5"
    >>> _, seconde, valeur = re.findall('(\d[,]*\d)', s)
    >>> seconde
    '01'
    >>> valeur
    '3,5'
    Bonjour,

    Merci, que signifie ce qu'il y a dans findall?

    Car en fait, j'aimerais récupéré 00:01.

    En fait, je veux tracer les points mais avec en abscisses: 00:00 00:01 00:02 ... 59:59

  5. A voir en vidéo sur Futura
  6. #5
    fred1599

    Re : Extraire données Python

    Il faut toujours être précis dans sa demande, on ne devine pas !

    Code:
    >>> minute, seconde, valeur = re.findall('(\d[,]*\d)', s)
    >>> minute
    '00'
    >>> seconde
    '01'
    >>> valeur
    '3,5'
    >>> ':'.join([minute, seconde])
    '00:01'
    Ce qu'il y a dans la fonction findall c'est un pattern, il faut étudier les expressions régulières.

  7. #6
    fred1599

    Re : Extraire données Python

    Du coup le plus simple maintenant serait

    Code:
    >>> s = "00:01.3,5"
    >>> s.split('.')
    ['00:01', '3,5']

  8. #7
    Micki2a

    Re : Extraire données Python

    Le soucis est que quand j'applique ça à mon fichier qui possède plusieurs données, je fais fichier.readline() et ça m'affiche 00:00.3,5\r\n

    Et je n'arrive pas à enlever les \r et \n en faisant le split.

  9. #8
    fred1599

    Re : Extraire données Python

    Pourquoi readline ?

    Code:
    with open('....', 'r') as f:
        for line in f:
            myLine = line.strip()
            myTime, value = myLine.split(';')
            # traitement de myTime et value
    Non testé, mais ça doit le faire je pense...

  10. #9
    fred1599

    Re : Extraire données Python

    Dans mon code précédent j'ai mis un point virgule au lieu d'un point, à modifier !

  11. #10
    Micki2a

    Re : Extraire données Python

    Code:
    x=[];
    y=[];
    with open('data.txt', 'r') as f:
        for line in f:
            myLine = line.strip();
            myTime, value = myLine.split('.');
    x.append(myTime);
    y.append(value);
    f.close();
    
    print x;
    print y;
    J'ajoute des listes x et y pour regrouper les valeurs de myTime (dans x) et value (dans y)

    Je ne comprends pas trop comment marche le for line in f. Comment lui faire parcourir tout le fichier et qu'il s'arrête lorsque c'est la fin?

  12. #11
    fred1599

    Re : Extraire données Python

    Déjà j'aurais aimé un retour sur mon code, est-il fonctionnel ?
    Ensuite f.close() est inutile, c'est tout l'intérêt de with open comparé au simple open...
    Pour for line in f, f est utilisé comme un itérable, il a une méthode spéciale __iter__ qui permet à l'objet fichier d'être itérer à l'aide d'une boucle pour lire ligne par ligne.

  13. #12
    Micki2a

    Re : Extraire données Python

    Code:
    x=[];
    y=[];
    with open('VdM_BCT_DCvsF.txt', 'r') as f:
    	for line in f:
    		myLine=line.strip();
    		myTime,value=myLine.split('.')
    		x.append(myTime);
    		y.append(value);
    		
    print x;
    print y;
    Oui, votre code marche cependant ça entoure les valeurs par des '. Par exemple dans mon x j'ai ['00:01' '00:02' ...].

    Est ce que ce code marche dans le cas d'un très grande nombre de données? (too many values to unpack) Erreur: Mon fichier fait 85000 lignes. Là je ne teste que sur quelques lignes.

    Et encore un autre problème est que dans mon fichier texte les données sont écrits avec des virgules, donc je ne pense pas que ça sera exploitable pour un tracé. (2,5 par exemple).

    En tout cas merci.

  14. #13
    fred1599

    Re : Extraire données Python

    Oui, votre code marche cependant ça entoure les valeurs par des '.
    Euh vous plaisantez ? La base est de savoir qu'une chaîne de caractères en python est représentée par des single quotes ou double quotes, et que pour les retirer, il suffit de les afficher par la fonction print par exemple...

    Est ce que ce code marche dans le cas d'un très grande nombre de données?
    Oui, le message d'erreur que vous avez n'est pas dû aux nombres de données, mais à la longueur de la ligne qui n'est pas celle que vous avez annoncé dans la problématique de départ.

    Et encore un autre problème est que dans mon fichier texte les données sont écrits avec des virgules, donc je ne pense pas que ça sera exploitable pour un tracé. (2,5 par exemple).
    J'ai proposé la solution plus haut pour que la valeur avec virgule devienne une valeur avec un point, que puis-je faire de mieux ?

  15. #14
    Micki2a

    Re : Extraire données Python

    On m'a parlé de numpy également, ça pourrait servir?

  16. #15
    fred1599

    Re : Extraire données Python

    On m'a parlé de numpy également, ça pourrait servir?
    On passe du coq à l'âne ! Il faut tester le code précédent, regarder les temps d'exécutions, et si cela s'avère être trop lents, il faudra optimiser par exemple, oui avec numpy...

  17. #16
    Micki2a

    Re : Extraire données Python

    Comme vous l'avez dit, j'aurais du préciser les difficultés dès le départ:

    - C'est un fichier .csv
    - Il y a 85000 données de ce genre:
    00:00.0,7615997400
    00:01.0,7918004200
    00:02.0,8155163100
    00:03.0,8124282900
    00:04.0,9097621500
    00:05.0,9480535000
    00:06.0,8675800100
    00:07.0,8490520100
    00:08.0,7835863000
    00:09.0,8337972700
    00:10.0,8163191800

  18. #17
    fred1599

    Re : Extraire données Python

    Avec toutes les infos données, voilà ce que ça pourrait donner

    Code:
    from locale import *
    
    setlocale(LC_NUMERIC, '')
    
    def convertLine(line):
        line = line.strip()
        time, value = line.split('.')
        value = atof(value)
        line = time, value
        return line
    
    with open('test.txt', 'r') as f:
        for line in f:
            time, value = convertLine(line)
            print(line) # pour tester
    
    # Faire ce que vous voulez avec value et time
    Je ne sais pas ce que vous faîtes avec matplotlib...

Discussions similaires

  1. Extraire les données d'un moteur Grillé
    Par reda42111 dans le forum Technologies
    Réponses: 5
    Dernier message: 15/05/2015, 21h51
  2. Extraire id 3D d'un fichier Prosite avec Python
    Par JakiJake dans le forum Programmation et langages, Algorithmique
    Réponses: 5
    Dernier message: 09/11/2013, 17h57
  3. Extraire données d'une valeur BCD
    Par Seitech dans le forum Électronique
    Réponses: 6
    Dernier message: 19/05/2010, 06h40
  4. [Python] Récupération d'une séquence de banque de données
    Par MaliciaR dans le forum Logiciel - Software - Open Source
    Réponses: 4
    Dernier message: 13/02/2009, 16h13
  5. EEPROM comment extraire les donnees et en remettre d'autres
    Par invite45fed121 dans le forum Électronique
    Réponses: 0
    Dernier message: 19/09/2008, 02h19