Menu

Extraire une valeur d'exposant dans un fichier txt

Messages postés
2
Date d'inscription
lundi 18 mars 2019
Statut
Membre
Dernière intervention
20 mars 2019
- - Dernière réponse : Wizout
Messages postés
2
Date d'inscription
lundi 18 mars 2019
Statut
Membre
Dernière intervention
20 mars 2019
- 20 mars 2019 à 09:49
Bonjour,

Je me permets de vous solliciter car je n'arrive pas à résoudre un problème. J'ai en effet besoin de récupérer la valeur de l'exposant associée à chaque valeur de I et J (comme montré sur l'image). J'ai réussi à sortir les valeurs de theta mais je suis bloqué par cette valeur d'exposant. Pourriez vous m'aider ?

Merci d'avance.



Afficher la suite 

1 réponse

Meilleure réponse
Messages postés
5133
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
19 juin 2019
778
1
Merci
Salut Wizout,

Lorsque tu postes sur le forum, ne poste pas des images du code ou des données traitées, mais poste le code ou les données et ce en utilisant les balises de code qui préservent les espaces et l'indentation et colorent et numérotent les lignes.

Cela nous permet de tester.

Alors, tout d'abord, je vais supposer que dans l'exemple ci-dessus tu veux récupérer : '102', '125', '-8.436' pour le premier groupe, puis '103', '124', '-3.338' pour le deuxième, et potentiellement d'autres données structurées de la même façon venant à la suite du fichier dans un troisième groupe, quatrième, etc..

Ce type de travail est beaucoup plus facile en utilisant les regexp compatibles Perl sous réserve de savoir les utiliser.

Voilà ce que cela donnerait avec un fichier
data.txt
où j'ai tenté de reconstituer une structure équivalente à celle de ton fichier pour les besoins de la mise au point de la regexp, comprenant :

>            pr theta i ii j jj
    stress angle

     I 102
 J
125     -8.436


>            set log off
* log file qsggq 
bla, bla

>            pr theta i ii j jj
    stress angle

     I 103
 J
124     -3.338

cela se fait en 3 lignes avec une regexp adaptée et un script Python3 comme suit, que j'ai nommé capture.py :

import re

# charger la totalité du fichier dans une string
with open('data.txt', 'r') as myfile:
      data = myfile.read()

# compiler la regexp en mode multiligne et en matchant les
# retours à ligne avec .
pexp = re.compile(r'.*?stress angle?.*?I\s([+-.0-9]+).*?J\s([+-.0-9]+).*?([+-.0-9]+)', flags=re.MULTILINE|re.DOTALL)

# capturer toutes les données matchant la regexp et créer
# une liste de tuples
captures = pexp.findall(data) 
print(captures)

cela donne à l'exécution :
$ python3 capture.py
[('102', '125', '-8.436'), ('103', '124', '-3.338')]


Tu devrais apprendre les regexp, c'est très puissant pour faire ce genre de chose.

Dal

Dire « Merci » 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CommentCaMarche

CCM 44088 internautes nous ont dit merci ce mois-ci

Wizout
Messages postés
2
Date d'inscription
lundi 18 mars 2019
Statut
Membre
Dernière intervention
20 mars 2019
-
Super ! Merci pour cette réponse et ce code.

Wiz
Commenter la réponse de [Dal]