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 la donnée avec python


Sujet :

Python

  1. #1
    Membre régulier
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2013
    Messages : 9
    Par défaut Lire la donnée avec python
    Bonsoir,

    Je suis très débutant avec python. J'ai un ficher module.txt dans lequel il y a seulement un colonne de chiffre comme suit:

    4.3E-003
    1.3E-003
    6.4E-004
    ....
    ....

    je définis un vecteur: data[]

    Pourriez-vous, SVP, me montrer comment pour distribuer les valeurs dans le fichers module.txt aux composantes du vecteur data[].

    Merci par avance.

    VMN

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Tu peux lire un fichier en l'ouvrant avec open('nomdefichier', 'mode') en mode lecture 'r'.

    Tu peux ensuite itérer sur les lignes du texte avec readline() ou recupérer l'ensemble des lignes sous forme de liste avec readlines().

    Comme les valeurs sont des chaînes de texte et qu'elles se terminent par un caractère de fin ligne, il faut les adapter à ton besoin, soit convertir avec float() et supprimer le retour ligne avec strip()

    dans ton cas, une façon simple serait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    >>> with open('values', 'r') as objf:
    ...     a = [float(x.strip()) for x in objf]
    ... 
    >>> a
    [0.0043, 0.0013, 0.0064]
    Note qu'en utilisant with tu ne dois pas fermer le fichier, Python le fera automatiquement même en cas d'erreur.

  3. #3
    Membre régulier
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2013
    Messages : 9
    Par défaut
    Merci Vincent,

    J'ai fait comme tu m'appris mais il annonce une erreur comme suite:

    --------------------------------------------------------------------------------------------------
    Python 2.6.6 (r266:84292, Dec 26 2010, 22:31:48)
    [GCC 4.4.5] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> with open ('depl_mesure.txt','r') as objf:
    ... a = [float(x.strip()) for x in objf]
    File "<stdin>", line 2
    a = [float(x.strip()) for x in objf]
    ^
    IndentationError: expected an indented block
    --------------------------------------------------------------------------------------------------

    Et c'est où le problème?

    Merci par avance.

    VMN

  4. #4
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Citation Envoyé par geomechanic Voir le message
    Merci Vincent,

    J'ai fait comme tu m'appris mais il annonce une erreur comme suite:

    --------------------------------------------------------------------------------------------------
    Python 2.6.6 (r266:84292, Dec 26 2010, 22:31:48)
    [GCC 4.4.5] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> with open ('depl_mesure.txt','r') as objf:
    ... a = [float(x.strip()) for x in objf]
    File "<stdin>", line 2
    a = [float(x.strip()) for x in objf]
    ^
    IndentationError: expected an indented block
    --------------------------------------------------------------------------------------------------

    Et c'est où le problème?

    Merci par avance.

    VMN
    Je suis débutant en python mais vu le message d'insultes, cela paraît être un problème d'indentation. Tu as un script ? Si oui, mets-le entre balises #.

    [edit] Je viens de réaliser que tu n'as pas de script.
    Par contre, tu as oublié d'indenter ta ligne après ":" : c'est la touche TAB...

  5. #5
    Membre régulier
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2013
    Messages : 9
    Par défaut
    Voici le script, il y a tous jour le problème:
    Fichiers attachés Fichiers attachés
    • Type de fichier : py lire.py (88 octets, 78 affichages)

  6. #6
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Il n'y a aucun problème avec le script. Fonctionne très bien chez moi.

    Par contre, je te conseillerais d'utiliser 4 espaces pour l'indentation parce que un seul espace c'est peu pour que ce soit clair au niveau des différents blocs de code.

  7. #7
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Pas mieux : tout fonctionne

  8. #8
    Membre régulier
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2013
    Messages : 9
    Par défaut
    Je vous joins également le ficher depf_mesure.txt. Lors que je lance le commande: python lire.py, il donne l'annonce d'erreur:

    ---------------------------------------------------------------------------
    Traceback (most recent call last):
    File "lire.py", line 2, in <module>
    a = [float(x.strip()) for x in objf]
    ValueError: invalid literal for float(): 0.0 -4.63E-003
    ---------------------------------------------------------------------------
    Fichiers attachés Fichiers attachés

  9. #9
    Membre Expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 568
    Par défaut
    Si tu avais décrit correctement le format de fichier dès le départ, cela aurait été plus simple... Ton fichier contient 2 valeurs numériques par lignes, dès lors comment faut-il traiter ce couple ? (par exemple : ignorer la première valeur et ne retenir que la deuxième pour chaque ligne...)

    Précise ce que tu veux faire, on est pas des devins.

    @+

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  10. #10
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Dans ton premier post tu dis qu'il n'y a qu'une colonne de valeur par ligne, en fait il y en a deux.

    Puisque les deux colonnes semblent toujours séparées par une tabulation, tu peux les séparer avec split('\t') qui te retournera une liste comme [0.0, -4.63E-003].

    Si tu n'as besoin que de la deuxième valeur, tu peux procéder ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    values = []
    with open('depl_mesure.txt','r') as objf:
        for line in objf.readlines():
            a, b = line.split('\t')
            values.append(float(b.strip()))
    print values

  11. #11
    Membre Expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 568
    Par défaut
    Si tu veux lire la deuxième colonne, tu peux écrire ceci (c'est sans doute un peu sybillin pour un débutant)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    with open('depl_mesure.txt','r') as objf:
       a = [float(x.split("\t")[1].strip()) for x in objf]
    print a
    Par rapport à la soluce précédente, je récupère la deuxième valeur dans la liste où elles sont séparées par une tabulation "\t".

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  12. #12
    Membre régulier
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2013
    Messages : 9
    Par défaut
    Merci beaucoup tous mes amis.
    Ca marche!

  13. #13
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 762
    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 762
    Par défaut
    Salut,

    Je suis très débutant avec python. J'ai un ficher module.txt dans lequel il y a seulement un colonne de chiffre comme suit:
    Il y a (au moins) deux sortes de débutants Python.
    Ce qui apprennent a programmer et ceux (la communauté scientifique en général) qui a besoin de l'outil informatique pour traiter des données numériques. Pour ces derniers, Python est beaucoup plus "outil", un moyen pour... plutôt qu'un langage de programmation.

    Je raconte cela pour vous faire la pub. d'outils comme NumPy, matplotlib,... ou des tout-en-un comme SciPy ou des tout en un comme PythonXY.

    Car en écrivant:
    je définis un vecteur: data[]
    si on fait des sciences, c'est un tableau avec une ou plusieurs colonnes.

    et en le codant comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    with open('depl_mesure.txt','r') as objf:
            a = [float(x.split("\t")[1].strip()) for x in objf]
    on a un objet list contenant des objets float.
    Et la possibilité d'indicer les éléments de la liste nous fait croire qu'il ne s'agit que d'un tableau.

    Pensez a regarder numpy. Importer des données est "la base", ça le fait tout seul:
    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 numpy as np
    >>> data = np.loadtxt('depl_mesure.txt')
    >>> data
    array([[  0.00000000e+00,  -4.63000000e-03],
           [  5.00000000e-01,  -1.14000000e-04],
           [  6.00000000e-01,  -1.04000000e-04],
           [  7.00000000e-01,  -8.12000000e-05],
           [  8.00000000e-01,  -7.30000000e-05],
           [  9.00000000e-01,  -6.18000000e-05],
           [  1.10000000e+00,  -4.03000000e-05],
           [  1.30000000e+00,  -3.44000000e-05],
           [  1.50000000e+00,  -2.87000000e-05],
           [  1.80000000e+00,  -2.26000000e-05],
           [  2.10000000e+00,  -1.57000000e-05],
           [  1.80000000e+01,   0.00000000e+00]])
    Pas la peine d'indiquer le nombre de colonnes, leur type,... (bon des fois, il faut...)
    Et c'est déjà une vraie matrice:
    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
    >>> data[0][1]
    -0.0046299999999999996
    >>> data * 3
    array([[  0.00000000e+00,  -1.38900000e-02],
           [  1.50000000e+00,  -3.42000000e-04],
           [  1.80000000e+00,  -3.12000000e-04],
           [  2.10000000e+00,  -2.43600000e-04],
           [  2.40000000e+00,  -2.19000000e-04],
           [  2.70000000e+00,  -1.85400000e-04],
           [  3.30000000e+00,  -1.20900000e-04],
           [  3.90000000e+00,  -1.03200000e-04],
           [  4.50000000e+00,  -8.61000000e-05],
           [  5.40000000e+00,  -6.78000000e-05],
           [  6.30000000e+00,  -4.71000000e-05],
           [  5.40000000e+01,   0.00000000e+00]])
    >>>
    Il est fastidieux de refaire tout ça avec des objets Python de base non?

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

  14. #14
    Membre Expert
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    952
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 952
    Par défaut
    Salut,
    Citation Envoyé par wiztricks Voir le message
    outils comme NumPy, matplotlib,... ou des tout-en-un comme SciPy ou des tout en un comme PythonXY.
    Il est fastidieux de refaire tout ça avec des objets Python de base non?
    Merci, je ne connaissais pas du tout numpy, c'est le genre d'info dont je suis friand! Je pense que ce post devrait carrément faire partie de la FAQ!

    A+

    Pfeuh

Discussions similaires

  1. [Python 2.X] Créer un écrire un fichier de données avec Python ? Pas de CSV ou .txt !
    Par Ben20 dans le forum Général Python
    Réponses: 5
    Dernier message: 16/04/2015, 12h22
  2. (Client/Serveur)Lire flux données avec sockets
    Par tr.hedi dans le forum Développement Web en Java
    Réponses: 1
    Dernier message: 24/02/2013, 22h05
  3. Réponses: 13
    Dernier message: 16/06/2010, 12h17
  4. Lire un fichier XML avec Python
    Par eyquem dans le forum Général Python
    Réponses: 2
    Dernier message: 19/12/2007, 13h54
  5. [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

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