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 :

modification code python


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Par défaut modification code python
    Bonjour a tous

    je recupere ce code python:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import re
     
    textos = "eada008.mrk"
    traducciones = "dico.utf8.txt"
    salida = "eada008650.mrk"
    with open(textos, 'r') as text, open(traducciones, 'r') as trad, open(salida, 'w') as salida:
        trad_lineas = dict(tr.strip().split(':', 1) for tr in trad.readlines() if ':' in tr)
        for linea in text:
            match = re.search(r'^=650.*\$a(.*)$', linea)
            if match:
                palabra = match.group(1).rstrip()
                if palabra in trad_lineas:
                    linea = "=650  \\\\$a{}$i{}\n".format(palabra, trad_lineas[palabra])
            salida.write(linea)
    Ce code sert a joindre 2 fichiers:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    textos = "eada008.mrk"
    traducciones = "dico.utf8.txt"
    dans le fichiers eada008.mrk il existe un champ 650 $a
    comme vous pouvez voir dans cet 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
    =LDR  00537nam a2200217   4500
    =001  1
    =008  030213s1999\\\\xxx|||||\||||\00|\0\eng\d
    =041  \\$aeng
    =093  \\$a13/02/2003
    =100  \\$aCrainer, Stuart$97117
    =245  10$aGravy training$binside the business of business schools$cStuart Crainer, Des Dearlove ; Crainer, Stuart ; Dearlove, Desmond
    =260  \\$aSan Francisco$bJossey-Bas$c1999
    =300  \\$a200 p
    =338  \\$aLibro
    =546  \\$aInglés
    =650  \\$aArte
    =700  \\$aDearlove, Desmond$97504
    =942  \\$n0
    =953  1cv
    =953  2cv
    =999  \\$c22630$d22630
    et dans le deuxieme fichier il existe une ligne avec la même valeur ici Art.
    voici un fragment:
    Arrendamientos urbanos:Urban rental
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Arte:Art
    Arte dramático:Dramatic art
    Artes:Arts
    Le resultat apres aplique ce script est ceci:

    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
    =LDR  00537nam a2200217   4500
    =001  1
    =008  030213s1999\\\\xxx|||||\||||\00|\0\eng\d
    =041  \\$aeng
    =093  \\$a13/02/2003
    =100  \\$aCrainer, Stuart$97117
    =245  10$aGravy training$binside the business of business schools$cStuart Crainer, Des Dearlove ; Crainer, Stuart ; Dearlove, Desmond
    =260  \\$aSan Francisco$bJossey-Bas$c1999
    =300  \\$a200 p
    =338  \\$aLibro
    =546  \\$aInglés
    =650  \\$aArte$iArt
    =700  \\$aDearlove, Desmond$97504
    =942  \\$n0
    =953  1cv
    =953  2cv
    =999  \\$c22630$d22630
    C'est a dire sa traduction avec $i devant.
    Le script marche super bien, mais voila, le fichier d'origine maintenant a ete changé et n'etant pas developpeur, je ne sais pas comment evaluer ce changement.
    Le nouveau champs 650 $a ressembe a ceci maintenant:

    Voyez, a ete ajouté un sous champs $9 245
    Je voudrais donc faire pareil maintenant mais avec ce $9 en plus.
    le resultat final serai:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =650  \\$aArte$9245$iArt
    Quelqu'un peu m'aider?

    D'avance merci

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Salut,
    Tout se passe ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            match = re.search(r'^=650.*\$a(.*)$', linea)
            if match:
                palabra = match.group(1).rstrip()
                if palabra in trad_lineas:
                    linea = "=650  \\\\$a{}$i{}\n".format(palabra, trad_lineas[palabra])
    Le re.search applique le pattern (r'^=650.*\$a(.*)$') a la ligne lue.
    Lorsque la ligne est: "=650 \\$aArte", palabra est récupéré match.group(1): /Arte/
    Apres on cherche la correspondance avec /Arte/ dans trad_lineas et on remplace.
    Si la chaine est maintenant "=650 \\$aArte$9245", il faudra que le pattern "matche" un truc comme r'^=650.*\$a(.*)$(\d+)' devrait faire l'affaire.

    On a deux match.group: palabra = match.group(1).rstrip(), number=palabra = match.group(2).

    Puis il faut remettre palabra et number dans la sortie...

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

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Par défaut
    Bonjour

    merci pour ta reponse, le probleme c'est que je comprends pas tout... J'ai remplacé le patern original par celui que tu propose:

    Donc j'ai ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import re
    
    textos = "eada650i.mrk"
    traducciones = "dico.utf8.txt"
    salida = "eada650iout.mrk"
    with open(textos, 'r') as text, open(traducciones, 'r') as trad, open(salida, 'w') as salida:
        trad_lineas = dict(tr.strip().split(':', 1) for tr in trad.readlines() if ':' in tr)
        for linea in text:
            match = re.search(r'^=650.*\$a(.*)$(\d+)', linea)
            if match:
                palabra = match.group(1).rstrip()
                if palabra in trad_lineas:
                    linea = "=650  \\\\$a{}$i{}\n".format(palabra, trad_lineas[palabra])
            salida.write(linea)

    je comprend pas le match.group(2) c'est quoi ce group(2) ?
    Le code que je colle ici, ça marche pas.

    Juste un detail:
    Si la chaine est maintenant "=650 \\$aArte$9245", il faudra que le pattern "matche" un truc comme r'^=650.*\$a(.*)$(\d+)' devrait faire l'affaire.
    La chaine est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     =650 \\$aVALEUR$9VALEUR
    La partie en gras 'est la partie fixe, mais les valeurs changent a chaque registre.

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Citation Envoyé par ldiaz Voir le message
    je comprend pas le match.group(2) c'est quoi ce group(2) ?
    Je ne pourrais pas vous expliquer cela mieux que ne le fait la documentation sur le module re.

    [quote]
    La chaine est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     =650 \\$aVALEUR$9VALEUR
    La partie en gras 'est la partie fixe, mais les valeurs changent a chaque registre.
    Oui effectivement, je n'avais pas compris cela comme ça.
    Mais $9 c'est comme $a, çà ne change pas grand chose.

    Je vous ai donne les idées de base.
    Coder a votre place pour vous priver du plaisir d'apprendre?
    Ah non! En tout cas pas moi.

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

  5. #5
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Par défaut
    Bonjour
    hahaha ok j'essai.

    bufff que c'est compliqué
    alors, j'ai changé ceci dans la proposition que tu faisait:
    Puisque le $a et le $9 sont des sous chanps, j'ai pensé que si je traite $9 comme $a ça pourrait marcher.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     match = re.search(r'^=650.*\$a(.*)$(.*)', linea)
    au lieu de:
    $(\d+)
    J'obtient ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    =650  \\$aArte$9245
    =650  \\$iArt
    C'est pas mal, c'est presque ça.. Le resultat 100% devrait être sur la même ligne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =650  \\$aArte$9245$iArt
    Comment je place tout sur la même ligne?
    Cordialement

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Citation Envoyé par ldiaz Voir le message
    Puisque le $a et le $9 sont des sous chanps, j'ai pensé que si je traite $9 comme $a ça pourrait marcher.
    Heu, traiter $9 comme $a c'est mettre "9' dans le pattern (comme le 'a').

    Comment tout remettre sur la même ligne?
    C'est la que ca se passe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                if palabra in trad_lineas:
                    linea = "=650  \\\\$a{}$i{}\n".format(palabra, trad_lineas[palabra])
    Et il faut aller voir la doc de la méthode .format des /str/.
    Comment ajouter ce qu'on a récupère dans .group(2)?

    C'est pas complique:
    • structure régulière cote /regexp/;
    • structure régulière cote /.format/;

    lancez python en mode "console".
    • initialisez 3/4 variables.
    • testez en interactif.
    • lorsque ça vous plaît, reportez la modif dans le code

    Et vous aurez appris plein de trucs.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Récupérer le code source d'une page HTML
    Par phyn04 dans le forum Réseau/Web
    Réponses: 5
    Dernier message: 24/11/2016, 14h45
  2. [SWIG] dialogue entre code C et code python
    Par dmichel dans le forum Interfaçage autre langage
    Réponses: 12
    Dernier message: 19/12/2007, 21h19
  3. TRAC modification code source
    Par bella1 dans le forum Applications et environnements graphiques
    Réponses: 3
    Dernier message: 06/08/2007, 11h18
  4. TRAC modification code source
    Par bella1 dans le forum Applications et environnements graphiques
    Réponses: 0
    Dernier message: 03/08/2007, 23h29
  5. Modification code ftp
    Par bebechat dans le forum C++
    Réponses: 3
    Dernier message: 05/04/2007, 14h30

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