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 :

Extraction de flottant et d'entier d'un fichier .txt


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Chargé de référencement
    Inscrit en
    Septembre 2018
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Chargé de référencement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2018
    Messages : 61
    Par défaut Extraction de flottant et d'entier d'un fichier .txt
    Bonjour, je voudrais savoir comment extraire des flottants et entiers d'un fichier .txt. Habituer à matlab j'utilise normalement la fonction fscanf mais il n'y a apparement pas d'équivalent en python. J'ai cherché sur internet mais je ne comprend pas très bien. Mon fichier est sous cette forme :

    NBatoms 2

    moleculeR 13.08

    Nbmolecules 1200

    Zefa 300

    Fluence 67E15

    Incident 0
    ......... ...
    J'ai d'abord pensé à utiliser la méthode .splitlines et slipt mais je n'y arrive pas et de toute façon ça va me renvoyé une liste. Apparemment on peut aussi utiliser la bibliothèque "re" mais je ne comprend pas très bien. Pouvez-vous m'aider ? merci

  2. #2
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Si je me base sur l'exemple, voilà un petit code (commenté) qui peut permettre de clarifier la suite:

    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
    # -*- coding: utf-8 -*-
     
    lignes = """
    NBatoms 2
     
    moleculeR 13.08
     
    Nbmolecules 1200
     
    Zefa 300
     
    Fluence 67E15
     
    Incident 0
    """
     
    for ligne in lignes.splitlines():
     
        ligne = ligne.strip() # on retire d'éventuels espaces avant et après
     
        if ligne=="":
            continue # c'est une ligne vide: on passe à la suivante
     
        nb = ligne.split()[-1] # on prend la dernière chaine après le dernier espace
     
        if '.' in nb or 'E' in nb:
            nb = float(nb) # c'est un nb flotant
        else:
            nb = int(nb) # c'est un entier
     
        print(nb) # affichage du nombre
    Ce qui affiche les nombres::

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    2
    13.08
    1200
    300
    6.7e+16
    0

  3. #3
    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 "splites" chaque ligne et tu analyses les éléments un par un avec les méthodes des strings.
    un exemple:
    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
     
    >>> s = "moleculeR 13.08"
    >>> l = s.split()
    >>> l
    ['moleculeR', '13.08']
    >>> for i in l:
    ...     try:
    ...             f = float(i)
    ...     except:
    ...             continue
    ...     else:
    ...             if not f % 1:
    ...                     print("%s est un entier" % int(f))
    ...             else:
    ...                     print("%s est un réel" %f)
    ... 
    13.08 est un réel
    >>>

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

    Cela se fait assez naturellement avec les fonctionnalités de bases:
    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
    >>> data = '''NBatoms 2
    ... moleculeR 13.08
    ... Nbmolecules 1200
    ... Zefa 300
    ... Fluence 67E15
    ... Incident 0'''
    >>> for line in data.splitlines():
    ...     if line:
    ...       a, b = line.split()
    ...       print (a, float(b))
    ...
    NBatoms 2.0
    moleculeR 13.08
    Nbmolecules 1200.0
    Zefa 300.0
    Fluence 6.7e+16
    Incident 0.0
    >>>
    Mais on utilisera plutôt des bibliothèques comme numpy ou pandas pour charger ce genre de fichiers et fabriquer son tableau.

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

  5. #5
    Membre confirmé
    Homme Profil pro
    Chargé de référencement
    Inscrit en
    Septembre 2018
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Chargé de référencement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2018
    Messages : 61
    Par défaut
    Salut merci pour toute vos réponses ça marche très bien ! (avec le .read() en plus). Mais comment je peux faire maintenant pour mettre toutes ces valeurs dans une seule et même liste ? type x=[2,13.08,1200,..] pour pouvoir sélectionner chaque valuer comme x[1], x[2]...le programme ci-dessous ne me renvoie pas ce que je voudrais, je vais essayé de trouver en attendant.. merci beaucoup
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    lignes = open('simulation.txt','rt')
    x=[]
    for ligne in lignes.read().splitlines():
        ligne = ligne.strip()
        if ligne=="":
            continue
        nb = ligne.split()[-1]
        if '.' in nb or 'E' in nb:
            nb = float(nb)
     
        else:
            nb = int(nb)
        x.append(nb)

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

    Citation Envoyé par TNema Voir le message
    Mais comment je peux faire maintenant pour mettre toutes ces valeurs dans une seule et même liste ?
    Les listes sont un type de base qu'on apprend à utiliser en ouvrant un bon tuto.... et les fonctions aussi.

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

  7. #7
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Citation Envoyé par TNema Voir le message
    Salut merci pour toute vos réponses ça marche très bien ! (avec le .read() en plus). Mais comment je peux faire maintenant pour mettre toutes ces valeurs dans une seule et même liste ? type x=[2,13.08,1200,..] pour pouvoir sélectionner chaque valuer comme x[1], x[2]...le programme ci-dessous ne me renvoie pas ce que je voudrais, je vais essayé de trouver en attendant.. merci beaucoup
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    lignes = open('simulation.txt','rt')
    x=[]
    for ligne in lignes.read().splitlines():
        ligne = ligne.strip()
        if ligne=="":
            continue
        nb = ligne.split()[-1]
        if '.' in nb or 'E' in nb:
            nb = float(nb)
     
        else:
            nb = int(nb)
        x.append(nb)
    Le programme ne renvoie pas ce que vous voulez... Là tel qu'il est, il ne renvoie rien ! Mais si vous faite un
    à la fin, il n'y a pas ce qu'il faut dedans lal liste x ?

  8. #8
    Membre confirmé
    Homme Profil pro
    Chargé de référencement
    Inscrit en
    Septembre 2018
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Chargé de référencement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2018
    Messages : 61
    Par défaut
    Oui pardon je suis en Nouvelle-Zélande donc avec le décalage c'est chaud. Oui j'avais mal placé le print je comprenais pas nickel mais là ça marche c super, merci bcp !! (je reviendrais peut-être vers vous si je bloque vraiment sur autre autre point )

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

Discussions similaires

  1. [shell] Extraction de chaines de caractères à partir d'un fichier txt
    Par matthieu44 dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 02/04/2015, 00h20
  2. copier un tableau d'entier dans un fichier.txt
    Par Alex le grand dans le forum Débuter
    Réponses: 7
    Dernier message: 06/12/2009, 17h19
  3. Extraction des chiffres d'un entier
    Par adrian07 dans le forum Pascal
    Réponses: 5
    Dernier message: 21/04/2009, 17h22
  4. Lire un entier dans un fichier txt
    Par mcspawn dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 29/10/2007, 12h25
  5. récupérer un entier dans le fichier ".rc"
    Par luffy0013 dans le forum MFC
    Réponses: 2
    Dernier message: 15/02/2005, 12h44

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