Calcul et écriture de fichier Python3

William_32 -  
 William_32 -
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

  1. Utilisateur anonyme
     
    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)
    0
  2. William_32
     
    Je ne vois pas ce qu'il se passe.

    Avez-vous une idée pour ce problème ?
    0
  3. Utilisateur anonyme
     
    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.....
    0
  4. William_32
     
    D'accord, je vais tenter de reformuler
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. William_32
     
    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
    ...
    0
  7. Utilisateur anonyme
     
    Ça OK, mais tu as répondu
    Je ne vois pas ce qu'il se passe.

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

    0
    1. William_32
       
      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.
      0
  9. Utilisateur anonyme
     
    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é

    0
  10. William_32
     
    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.
    0
  11. William_32
     
    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 ?
    0
  12. Utilisateur anonyme
     
    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.

    0
  13. William_32
     
    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 ?
    0