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 :

Besoin d'aide pour remplacer 1 ou plusieurs ligne(s) entre 2 autres lignes avec certaines conditions


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 44
    Points : 30
    Points
    30
    Par défaut Besoin d'aide pour remplacer 1 ou plusieurs ligne(s) entre 2 autres lignes avec certaines conditions
    Oui bonjour, j'ai déjà demander de l'aide ici Besoin d'aide pour remplacer avec expression régulière sur plusieurs lignes dans le passer pour un problème similaire mais là c'est légèrement différent ce que je veut faire et même beaucoup plus compliquer à mon avis vu la difficulté que j'éprouve.

    Alors voilà aux lieux cette fois de vouloir traiter la partie entre les 2 balises suivantes
    et
    je voudrais traiter la partie entre les 2 balises suivantes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <JobAttractivityPerCulture>
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    </JobAttractivityPerCulture>
    mais sous certains conditions et donc le code adapter suivant ne marche pas pour ça bien sur pour ce que je veut faire
    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
    18
    19
    # -*- coding: cp1252 -*-
    import re
    re_tag=re.compile(r'[<>]')
    we_are_in_the_JobAttractivityPerCulture_area = False
    of=open('destination', "w")
    multiplieurCapacity = int(raw_input('entrée un nombre pour multiplier la Capacitée par '))
    for l in open("source"):
        if "</JobAttractivityPerCulture>" in l:
            we_are_in_the_JobAttractivityPerCulture_area = False
        if we_are_in_the_JobAttractivityPerCulture_area:
            splitted_line = re_tag.split(l)
            new_val = int(100)
            new_line = "%s<%s>%.i<%s>\n" % (splitted_line[0], splitted_line[1], new_val, splitted_line[3])
            of.write(new_line)
        else:
            of.write(l)
        if "<JobAttractivityPerCulture>" in l:
            we_are_in_the_JobAttractivityPerCulture_area = True
    raw_input('Appuie sur <Entrée> ...')
    ce que j'essais de faire c'est que si entre ces 2 balises les valeurs dans une ou plusieurs balises intermédiaires sont telle valeurs par exemple <100 comme ceci on va dire
    ligne en question remplacer aux cas par cas sinon si ligne >=100 comme ceci on va dire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    splitted_line[2] >= 100
    ligne non remplacer et identique donc pour l'écriture, mais que si aucune ligne n'est remplacer parce que toutes les lignes sont >=100 fichier non écrit puis fermer et fichier suivant ce jusqu'à la fin de tous les fichiers à traiter et break
    et aussi j'ai un autre problème ou introduire c'est partie de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if os.path.exists(dirname2):
        print 'exist déjà ' + dirname2
    else:
        os.makedirs(dirname2)
    qui cette dernier et pour créer un ensemble de répertoire avec l'arborassent qui va avec mais seulement créer si il y a un ou plusieurs fichier(s) à créer dedans si aucun fichier bien sur pas créer puisque pas besoin.

  2. #2
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2010
    Messages
    140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2010
    Messages : 140
    Points : 182
    Points
    182
    Par défaut
    Bonjour MediaVistaIntel,

    ce que tu veux faire est mal :p,
    tu souhaite transformer du XML en mode texte, chose qui est tout à fait faisable, mais plus compliqué que passer par des technologies telles que le XPATH, XQUERY pour ne citer que celles là.

    le XPATH doit pouvoir répondre à ton problème avec quelque chose un peu plus élaboré que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //JobAttractivityPerCulture[count(*) > 100]
    qui te permet de récupérer seulement les noeuds du XML que la requete filtre.
    Je te laisse bien entendu le soin de chercher comment executer une requete XPATH sur un document XML en python, et la joie de trouver le code permettant d'arriver à tes fins.

    Cordialement

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 44
    Points : 30
    Points
    30
    Par défaut
    Rebonjour, c'est remoi j'essayer celà avec une variable c'est pour ça que ma méthode ne coller pas, je l'ai remplacer par une fonction voir mon nouvel exemple de code qui à mon avi est beaucoup mieux que le 1er celà dis pas encore tester si ça marche correctement,
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    # -*- coding: cp1252 -*-
    import re
    def JobAttractivityPerCulture(temp):
        results = []
        re_tag=re.compile(r'[<>]')
        we_are_in_the_JobAttractivityPerCulture_area = False
        for line in temp.splitlines():
            if "</JobAttractivityPerCulture>" in line:
                we_are_in_the_JobAttractivityPerCulture_area = False
            if we_are_in_the_JobAttractivityPerCulture_area:
                splitted_line = re_tagtag.split(line)
                def new_val():
                    if int(splitted_line[2])<100:
                        return 100
                    elif int(splitted_line[2])>=100:
                        return int(splitted_line[2])
                new_line = "%s<%s>%.i<%s>" % (splitted_line[0], splitted_line[1], new_val(), splitted_line[3])
                results.append(new_line)
            else:
               results.append(line)
            if "<JobAttractivityPerCulture>" in line:
               we_are_in_the_JobAttractivityPerCulture_area = True
        return '\n'.join(results)
    JobAttractivityPerCulture_var=JobAttractivityPerCulture(texte)
    if JobAttractivityPerCulture_var==texte:
        None
    elif JobAttractivityPerCulture_var!=texte:
        of=open('destination', "w")
        of.write(JobAttractivityPerCulture_var)
        of.close()
    Edit: Oui ça marche correctement pour le dossier créer ou non pas la peine que je mette comment faire, à mon avi.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 11
    Dernier message: 13/12/2011, 17h41
  2. Besoin d'aide pour remplacer avec expression régulière sur plusieurs lignes
    Par MediaVistaIntel dans le forum Général Python
    Réponses: 11
    Dernier message: 01/12/2011, 14h19
  3. Besoin d'aide pour plusieurs Layout sur une même Frame
    Par CosaNostra dans le forum Agents de placement/Fenêtres
    Réponses: 8
    Dernier message: 12/02/2010, 16h27
  4. [TP]besoin d'aide pour commandes inconnues
    Par Upal dans le forum Turbo Pascal
    Réponses: 15
    Dernier message: 03/10/2002, 10h48
  5. Besoin d'aide pour l'I.A. d'un puissance 4
    Par Anonymous dans le forum C
    Réponses: 2
    Dernier message: 25/04/2002, 17h05

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