[Python] Split : déformation de chaines

Fermé
Leahpar - 19 mai 2010 à 13:26
 6ril - 27 mai 2010 à 19:27
Bonjour,

je sollicite votre aide pour régler un petit problème qui me pose la fonction Split. Voici mon problème :

Cette ligne est dans un fichier annexe au programme au format txt
stringDeb = <h4>Prix</h4>\n<table width="100%" id="otherquantites">\n<tr>\n<th width="44%">Qt\xc3\xa9</th>\n<th>\nPrix Unitaire HT\n</th>\n


Je cherche à récupérer cette ligne grâce à ces deux lignes de Python pour enlever le ' = ' et à garder le reste dans une liste. Donc fonction split oblige :
line=f.readline()
liste = line.split(' = ')


Quand je fait un "print liste" voici ce que j'obtiens :

['stringDeb', '<h4>Prix</h4>\\n<table width="100%" id="otherquantites">\\n<tr>\\n<th width="44%">Qt\\xc3\\xa9</th>\\n<th>\\nPrix Unitaire HT\\n</th>\\n\n']


Comme vous pouvez le constaté, certains \ sont doublés.

J'aimerais savoir pourquoi ça se passe ainsi et comment faire en sorte que les \ restent simple et ne doublent pas. N'ayant rien trouvé dans la documentation en ligne, je fais appel à votre expérience.


A voir également:

3 réponses

tu veux en faire quoi de la ligne que tu récupères?

car si tu veux juste la fin au pire tu supprimes le début (ou récupère que la fin au choix ;) )

je pense que la fonction te met des '//' car ainsi '/' est considéré comme le caractère et non plus comme le début du retour à la ligne

je vois pas trop de solution à ton problème à part peut être ceci:
liste[1] = liste[1].replace('//', '/')
0
EN fait j'ai résolu le problème avec mon tuteur de stage. La chaine je la récupérais pour faire un split avec. Je récupérais une page html et grâce à deux morceaux de cette page j'isolais un tableau de donnée.

Comme tu me l'a dis le problème venait du fait que le page html codait les sauts de ligne avec des (enter) et pas des \n. Quand j'ai copier le morceau de chaine pour faire le split j'ai remplacer les (enter) apr des \n, donc quand le programme tournait il remplaçait les \n par \\n, et donc quand je les réutilisait, il ne reconnait pas...

Pour résoudre mon problème, j'ai opté pour copier les saut de ligne dans le fichier texte, mais comme je lisait ligne par ligne j'ai du ajouter des balises de fin de chaine et faire une fonction pour concaténer tous les morceaux et obtenir la chaine original.

je me doute que mon explication est un peu confuse mais voici le code de la fonction que j'ai écrit, si ça intéresse des gens :

f = open("parametrage.txt", "r")
line = []
liste = []
listeSepDeb = []
listeSepFin = []
listeurl=[]
listeatt=[]
listenet=[]

while(line!=''):
    s=''
    line=f.readline()
    liste = line.split(' = ')
    if (liste[0]=='url'):#recuperation des url
        listeurl.append(liste[1].rstrip('\n'))
    if (liste[0]=='attribut'):#recuperation des attributs
        listeatt.append(liste[1].rstrip('\n'))
    if (liste[0]=='formatnettoyage'):#recuperation des fonction de nettoyage
        listenet.append(liste[1].rstrip('\n'))
#-----------------------------------------------STRINGDEB-----------------------------------------------
    if (liste[0]=='stringDeb'):
        while(liste[0][-2:]!='$\n'):
            if (liste[0]=='stringDeb'):
                s=s+liste[1]
            else:
                s=s+liste[0]
            line=f.readline()
            liste = line.split(' = ')
        listeSepDeb.append(s.rstrip('$\n'))

#-----------------------------------------------STRINGFIN-----------------------------------------------
    if (liste[0]=='stringFin'):
        while(liste[0][-2:]!='$\n'):
            if (liste[0]=='stringFin'):
                s=s+liste[1]
            else:
                s=s+liste[0]
            line=f.readline()
            liste = line.split(' = ')
        listeSepFin.append(s.rstrip('$\n'))


Je me suis peut être compliqué la vie, par rapport aux possibilité de Python, mais voila j'ai fait comme j'ai pu avec mon savoir en C... (Vive le C \o/)

Merci quand même d'avoir répondu
0
ça me parait lourd comme méthode, je regarderai plus en détails.

mais, quelques détails m'ont attiré:

- je replacerais tes 'if' par des 'elif' (equivalent de 'else if' en C) car 2 des conditions ne peuvent pas arriver à la suite (c'est juste pour la lisibilité du code je trouve)
- je vois pas trop pourquoi tu fais ça:
if (liste[0]=='stringFin'): 
        while(liste[0][-2:]!='$\n'): 
            if (liste[0]=='stringFin'):
0