Extraire une valeur d'exposant dans un fichier txt

Fermé
Wizout Messages postés 2 Date d'inscription lundi 18 mars 2019 Statut Membre Dernière intervention 20 mars 2019 - 18 mars 2019 à 11:50
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.



A voir également:

1 réponse

[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié le 20 mars 2019 à 09:53
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
1
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
Super ! Merci pour cette réponse et ce code.

Wiz
0