Calcul et écriture de fichier Python3

Bonjour,

POINT     1  N   VAL A   1      10.720  
POINT 2 CA VAL A 1 10.228
POINT 9 CA LEU A 2 6.624
POINT 17 CA SER A 3 4.831
POINT 23 CA PRO A 4 2.252
POINT 30 CA ALA A 5 -0.457
POINT 35 CA ASP A 6 1.069
POINT 43 CA LYS A 7 0.94


J'aimerai créer une fonction qui extrait les lignes contenant POINT et CA puis si la soustraction leur valeur dans la sixième colonne consécutif est inférieure à 3 , écrire dans un fichier de sorti :
 POINT 1 et POINT 2 chaine différente
POINT 2 et POINT 3 meme chaine
POINT 3 et POINT 4 meme chaine

....

Si quelqu'un aurait une idée ?? Merci beaucoup !

Configuration: Windows / Firefox 76.0

15 réponses

  • Votes
  • Date
  • Date décroissante
  1. Bonjour
    https://python.doctor/page-expressions-regulieres-regular-python

    Et un petit exemple
    http://regexstorm.net/tester?p=POINT+%5cd%2b+CA+.%2b&i=POINT+1+N+VAL+A+1+10.720+%0d%0aPOINT+2+CA+VAL+A+1+10.228+%0d%0aPOINT+9+CA+LEU+A+2+6.624%0d%0aPOINT+17+CA+SER+A+3+4.831%0d%0aPOINT+23+CA+PRO+A+4+2.252+%0d%0aPOINT+30+CA+ALA+A+5+-0.457+%0d%0aPOINT+35+CA+ASP+A+6+1.069+%0d%0aPOINT+43+CA+LYS+A+7+0.94

    (Lien non cliquable, il faut le copier coller dans ta barre d’adresse)
    1. Je ne vois pas ce qu'il se passe.

      Avez-vous une idée pour ce problème ?
      1. Qu’est ce que tu ne voies pas?
        Parce que nous on ne voie que ce que tu écris, et ça ne décrit rien.....
        1. Bonjour,

          J'aimerai créer une fonction qui extrait uniquement les lignes contenant POINT ( en colonne 1) et CA ( en colonne 3 ) de mon_fichier1.txt.
          mon_fichier1.txt
          POINT 1 N VAL A 1 10.720
          POINT 2 CA VAL A 1 10.228
          POINT 9 CA LEU A 2 6.624
          POINT 17 CA SER A 3 4.831
          POINT 23 CA PRO A 4 2.252
          POINT 30 CA ALA A 5 -0.457
          POINT 35 CA ASP A 6 1.069
          POINT 43 CA LYS A 7 0.94

          et qui écrit mon_fichier2.txt :
          mon_fichier2.txt
          POINT 2 CA VAL A 1 10.228
          POINT 9 CA LEU A 2 6.624
          POINT 17 CA SER A 3 4.831
          POINT 23 CA PRO A 4 2.252
          POINT 30 CA ALA A 5 -0.457
          POINT 35 CA ASP A 6 1.069
          POINT 43 CA LYS A 7 0.94

          puis sur mon_fichier2.txt qui soustraie les valeurs 2 à 2 des lignes consécutives de la septième colonne. On aurait : 10.228 - 6.624. Si cette valeur est inférieur à 3, alors il faudrait écrit en sortie:
          POINT 2 et POINT 9 chaine différente
          POINT 9 et POINT 17 meme chaine # car le résultat de 6.624 - 3 4.831 est inférieur à 3
          POINT 17 et POINT 23 meme chaine
          POINT 23 et POINT 30 meme chaine
          ...
          1. Ça OK, mais tu as répondu
            Je ne vois pas ce qu'il se passe.

            1. J'aimerais juste créer une fonction qui me permet d'obtenir la dernière sortie
          2. D'accord es tu allé voir le tuto sur les regex et l'exemple que je t'ai fait?

            1. Oui je suis allé voir. L'exemple et le site sur les expression régulière. Mais pour l'exemple j'aimerai que ce soit tourner en python 3 simple, avec un if par exemple. Je sais qu'il faut que j'utilise un open pour ouvrir un fichier puis un write pour créer le fichier mon_fichier2.txt. Je tatonne
              Là je demande de l'aide simple à quelqu'un qui s'y connaîtrait en python3. Mais si c'est pour me faire un cours qui va prendre 80 messages, ça sert à rien.
          3. Ha oui, mais ici on ne fait pas le boulot à ta place.
            On donne des pistes et des cours pour que le demandeur apprenne de lui même.
            C'est écrit dans la charte du forum.

            Après quand le demandeur présente un code, on peut parler de ce code.

            Certes je ne te propose un outil que sur une partie de ton besoin, mais python, c'est pas mon fort, et je ne m'y mets que si le demandeur montre un peu d'effort de son coté

            1. Okk je vois c'est très gentil de ta part, mais mon problème est dirigé pour les personnes qui s'y connaissent en python3, pour qu'ils soient écrit python3.
              Je vais pas faire semblant, je ne cherche pas de pistes, je cherche une réponse.

              Les gens vont sur des forums pour trouver des réponses à leur problème informatique , après pourquoi pas discuter de la réponse.
              1. Ok je comprends.

                Aurais-tu une piste pour faire la soustraction des colonnes 7 de deux lignes consécutives. Est ce qu'il faudrait que je passe par une boucle ? Je ferais donc un i - j . Mais comment définir i ?
                1. Oui,

                  1 tu écris une fonction, que je vais appeler "BonneLigne", elle retourne, grâce à la regex la première ligne qui a le format souhaité

                  2 dans ta fonction principale, tu appelles "BonneLigne" et tu stockes le résultat dans une variable L1
                  Dans une boucle
                  • tu appelles à nouveau "BonneLigne",
                    • si elle n'a pas de résultat, le traitement est fini
                    • si elle a un résultat,
                      • tu le stockes dans L2
                      • tu "splites" le texte pour récupérer le numéro de la ligne et la valeur (tu peux aussi le faire avec la regex avec des groupes dans "BonneLigne")
                      • tu fais ta soustraction et tu composes ta ligne de sortie en fonction
                      • tu écris la ligne de sortie dans le fichier
                      • tu mets le contenu de L2 dans L1 pour la prochaine fois


                  PS: la regex qui avec les groupes et qui rejette une ligne sans nombre à la fin
                  https://regex101.com/r/EUM41W/1
                  Dans la colonne de droite on voir chaque "Match" et les 2 groupes

                  PS2: ce matin j'étais sur ma tablette, et regex101 ne marche pas avec.

                  1. Bonjour,

                    La premiere étape que je dois réaliser c'est ouvrir le fichier car je ne pars pas d'une liste

                    fichier = open("maitre_corbeau.txt", "r")


                    Mais dès que python ouvre un fichier est ce qu'il le voit comme un tableau ?