Forum Programmation.python Remplacement d'une chaine de caractère

Posté par  .
Étiquettes : aucune
0
3
jan.
2007
Bonjour

J'ai un fichier xml, dans lequel je veux recopier les n dernières lignes.

Ensuite je souhaite remplacer la chaîne de caractère A par la chaîne de caractère B .

Comment puis-je faire?

Merci d'avance pour votre aide.
  • # tail et sed (par exemple)

    Posté par  . Évalué à -1.

    man tail
    pour savoir comment recuperer les N dernieres lignes

    que tu passes à sed
    man sed
    pour savoir comment rechercher/remplacer

    syntaxe approximative (car tu dois apprendre à chercher un peu ;-) )
    tail -options N le_fichier | sed -options recherche/remplace >nouveau_fichier
    • [^] # Re: tail et sed (par exemple)

      Posté par  (site web personnel) . Évalué à 3.

      Sauf que je crois que le monsieur voulait ca en python.

      En python, une solution triviale serait de faire un truc genre


      print "begin"
      fic = open("test.xml","r")
      lignes = fic.readlines()[-3:]
      fic.close()

      nouveaufichier = []
      for ligne in lignes:
      nouveaufichier.append(ligne.replace("bou","pouet"))

      fic = open("nouveau_test.xml","w")
      fic.write("".join(nouveaufichier))
      fic.close()
      print "end"


      Mais il doit surement exister plus simple, et pour des remplacements plus élaborés voir le module re d'expressions régulières
      • [^] # Re: tail et sed (par exemple)

        Posté par  . Évalué à 0.


        Sauf que je crois que le monsieur voulait ca en python.



        c'est logique, et en plus, je dois avouer que je regarde rarement la categorie du post.

        sinon apparemment ta solution en python semble etre plebiscité.
        • [^] # Re: tail et sed (par exemple)

          Posté par  (site web personnel) . Évalué à 0.

          tail et perl :
          tail -n x nom_fichier.xml | perl -pne 's/chaineA/chaineB/g' > nom_fichier_résultat.xml
          (ou x nombre de ligne et chaineA, chaineB tes chaîne de caractère a échanger)

          Et le tour est joué, même pas de code a écrire et ça mouline tout seul ;)
      • [^] # Re: tail et sed (par exemple)

        Posté par  . Évalué à 1.

        Merci à tous pour vos infos, mais c'est vrai que je voulai cela en python.

        Cela est super cool car je vai avoir un debut pour m'eclater avec le python.

        Je pense que je vais revenir vous embêtez.

        Merci encore et bonne année 2007 à tous
      • [^] # Re: tail et sed (par exemple)

        Posté par  . Évalué à 0.

        Bonjour

        j'ai un petit problème concernant la ligne

        nouveaufichier.append(ligne.replace("bou","pouet"))

        Peux tu me dire pourquoi elle ne passe pas avec un run.

        Merci
        • [^] # Re: tail et sed (par exemple)

          Posté par  (site web personnel) . Évalué à 1.

          [une idée comme ça]

          ...ça serait pas un copier/coller rapide et un manque d'indentation de cette ligne par rapport à celle qui la précède...

          Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN

          • [^] # Re: tail et sed (par exemple)

            Posté par  . Évalué à 1.

            print "début" # début procédure

            from os import chdir
            chdir("/Volumes/GERTEX/_test/")

            import shutil, string, re

            obfic = open("taglist.xml","r") # Lecture ds le fichier taglist des 60 dernières lignes
            lignes = obfic.readlines()[-59:]
            obfic.close()

            obfic = open("tampon_taglist.xml","w") # Copie ds le fichier tampon_taglist des 60 dernières lignes
            obfic.write("".join(lignes))
            s = '>442<'
            re.sub(r'\s','>444<',s)
            obfic.close()

            shutil.copyfile('tampon_taglist.xml','nouveau_taglist.xml') # Copie de taglist.xml dans nouveau_taglist.xml

            print "fin" # fin procédure


            voilà avec votre aide j'en suis là.
            J'arrive a recopier mes 60 lignes dans un autre fichier, mais lorsque je cheche à remplacer une chaine de caractère par une autre dans mon fichier xml je n'y arrive pas (442 en 444), pourriez vous me dire pourquoi?

            de pls je cherche à recopier tout mon fichier tampon dans mon original mais à l'avant dernière ligne?

            merci de vos tuyaux?

            @+
            • [^] # Re: tail et sed (par exemple)

              Posté par  . Évalué à 0.

              Ok pour infos j'ai revu mon prog et je vous propose cela.

              Il fonctionne, par compte l me reste à copier depuis mon fichier tampon mes lignes en fin de fichier ds taglist.

              print "début" # début procédure

              from os import chdir
              chdir("/Volumes/GERTEX/_test/")

              import shutil, string, re

              obfic = open("taglist.txt","r") # Lecture ds le fichier taglist des 60 dernières lignes
              lignes = obfic.readlines()[-59:]
              obfic.close()

              obfic = open("tampon_taglist.txt","w") # Copie ds le fichier tampon_taglist des 60 dernières lignes
              obfic.write("".join(lignes))
              obfic.close()

              chIn1 = raw_input('Remplacer la chaîne de caractères de id1 ')
              chIn2 = raw_input('Par la nouvelle chaîne de caractère de id1 suivante ')
              chIn3 = raw_input('Remplacer la chaîne de caractères de id2 ')
              chIn4 = raw_input('Par la nouvelle chaîne de caractère de id2 suivante ')
              chIn5 = raw_input('Remplacer le mnemonic ')
              chIn6 = raw_input('Par le mnemonic suivant ')
              s = open('/Volumes/GERTEX/_test/tampon_taglist.txt','r')
              o = open('/Volumes/GERTEX/_test/taglist.txt','w')
              for i in s.readlines():
              o.write('%s\n' % i.replace(chIn1 , chIn2))
              o.write('%s\n' % i.replace(chIn3 , chIn4))
              o.write('%s\n' % i.replace(chIn5 , chIn6))
              s.close()
              o.close()

              print "fin"

              Et merci à vous pour vos infos.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.