Dans un fichier texte, je souhaiterais remplacer tous les \url{adresse
web} par : <A HREF = "adresse web">adresse web</A>.
Une idée ? Une doc ?
Merci.
Rémi.
Oui justement... Bon, après plusieurs essais/erreurs, j'arrive au code suivant qui, semble fonctionner, et qui dans un premier temps extrait du fichier texte une partie précise et converti les url{adresse} en la version HTML :
# on empile tous les contents de url{} dans une liste
url_list = re.findall(urlc, contents)
# on dépile...
nouveau = contents lng=len(url_list) i=1 while i <= lng: texte = ('<A HREF = "%s">%s</A>' % (url_list[i-1],url_list[i-1])) i=i+1 nouveau = re.sub(urlc,texte,nouveau,1)
print nouveau #---------------
Est-ce pythonesque ? ;-) si taht ceni ? ;-) @+ et merci. Rémi.
Bonsoir !
Regarde le module "re".
Oui justement... Bon, après plusieurs essais/erreurs, j'arrive au code
suivant qui, semble fonctionner, et qui dans un premier temps extrait du
fichier texte une partie précise et converti les url{adresse} en la
version HTML :
Oui justement... Bon, après plusieurs essais/erreurs, j'arrive au code suivant qui, semble fonctionner, et qui dans un premier temps extrait du fichier texte une partie précise et converti les url{adresse} en la version HTML :
for i in urlc.findall(contents): text = '...' contents = urlc.sub(texte,contents,1)
Pourquoi ? urlc.findall est un iterateur, tu peux donc boucler dessus. Note que cela marche avec enormement de chose (les lignes d'un fichier, le contenu d'une liste)
urlc est un objet de type regex, il a donc les methodes de la classe re, donc sub. Cela t'évite le re.sub(urlc...)
Note une chose HS, en html on ecrit les tags en minuscule.
Est-ce pythonesque ? ;-)
Pas encore :) Apparament tu as des habitude de langage trés fonctionel où tu ne peux faire qu'une chose par ligne. Perd cette habitude, Python te permet de faire plus en moins de ligne et plus lisiblement. Je ne te dis pas qu'il faut tous faire en 1 ligne, cela fait des trucs ignobles :
"%s@%s.%s" % tuple([i[::-1] for i in "".replace('@','.').split('.')])
''
Mais je te dis juste que des fois, c'est plus propre et concis en une ligne que 10.
for i in urlc.findall(contents):
text = '...'
contents = urlc.sub(texte,contents,1)
Pourquoi ? urlc.findall est un iterateur, tu peux donc boucler dessus.
Note que cela marche avec enormement de chose (les lignes d'un fichier,
le contenu d'une liste)
urlc est un objet de type regex, il a donc les methodes de la classe re,
donc sub. Cela t'évite le re.sub(urlc...)
Note une chose HS, en html on ecrit les tags en minuscule.
Est-ce pythonesque ? ;-)
Pas encore :)
Apparament tu as des habitude de langage trés fonctionel où tu ne peux
faire qu'une chose par ligne. Perd cette habitude, Python te permet de
faire plus en moins de ligne et plus lisiblement. Je ne te dis pas qu'il
faut tous faire en 1 ligne, cela fait des trucs ignobles :
"%s@%s.%s" % tuple([i[::-1] for i in
"mail@host.ext".replace('@','.').split('.')])
'liam@tsoh.txe'
Mais je te dis juste que des fois, c'est plus propre et concis en une
ligne que 10.
for i in urlc.findall(contents): text = '...' contents = urlc.sub(texte,contents,1)
Pourquoi ? urlc.findall est un iterateur, tu peux donc boucler dessus. Note que cela marche avec enormement de chose (les lignes d'un fichier, le contenu d'une liste)
urlc est un objet de type regex, il a donc les methodes de la classe re, donc sub. Cela t'évite le re.sub(urlc...)
Note une chose HS, en html on ecrit les tags en minuscule.
Est-ce pythonesque ? ;-)
Pas encore :) Apparament tu as des habitude de langage trés fonctionel où tu ne peux faire qu'une chose par ligne. Perd cette habitude, Python te permet de faire plus en moins de ligne et plus lisiblement. Je ne te dis pas qu'il faut tous faire en 1 ligne, cela fait des trucs ignobles :
"%s@%s.%s" % tuple([i[::-1] for i in "".replace('@','.').split('.')])
''
Mais je te dis juste que des fois, c'est plus propre et concis en une ligne que 10.
-- Guillaume.
remi
Bonjour,
Merci beaucoup pour vos remarques. Elles m'ont beaucoup apporté. Pour info, voici le code "final" :
#--------------
import re file_string = open('faq_test.tex').read()
########## # Extraction de partie entre tableofcontents et end{document}... # ########
for i in urlc.findall(contents): text = ('<a href = "%s">%s</a>' % (i, i)) contents = urlc.sub(text,contents,1)
print contents #----------- C'est deux fois plus court qu'avant !
Est-ce pythonesque ? ;-)
Pas encore :) Apparament tu as des habitude de langage trés fonctionel où tu ne peux faire qu'une chose par ligne. Perd cette habitude, Python te permet de faire plus en moins de ligne et plus lisiblement.
Je débute et n'ai _aucune_ expérience de prog (à part sur calculatrice HP48, il y a bien longtemps...)
Merci ! :-) @+ Rémi
Bonjour,
Merci beaucoup pour vos remarques. Elles m'ont beaucoup apporté.
Pour info, voici le code "final" :
#--------------
import re
file_string = open('faq_test.tex').read()
##########
# Extraction de partie entre tableofcontents et end{document}...
# ########
for i in urlc.findall(contents):
text = ('<a href = "%s">%s</a>' % (i, i))
contents = urlc.sub(text,contents,1)
print contents
#-----------
C'est deux fois plus court qu'avant !
Est-ce pythonesque ? ;-)
Pas encore :)
Apparament tu as des habitude de langage trés fonctionel où tu ne peux
faire qu'une chose par ligne. Perd cette habitude, Python te permet de
faire plus en moins de ligne et plus lisiblement.
Je débute et n'ai _aucune_ expérience de prog (à part sur calculatrice
HP48, il y a bien longtemps...)
for i in urlc.findall(contents): text = ('<a href = "%s">%s</a>' % (i, i)) contents = urlc.sub(text,contents,1)
print contents #----------- C'est deux fois plus court qu'avant !
Est-ce pythonesque ? ;-)
Pas encore :) Apparament tu as des habitude de langage trés fonctionel où tu ne peux faire qu'une chose par ligne. Perd cette habitude, Python te permet de faire plus en moins de ligne et plus lisiblement.
Je débute et n'ai _aucune_ expérience de prog (à part sur calculatrice HP48, il y a bien longtemps...)
Merci ! :-) @+ Rémi
Guillaume Bouchard
remi wrote:
Bonjour,
Bonjour,
Merci beaucoup pour vos remarques. Elles m'ont beaucoup apporté.
De rien.
Je débute et n'ai _aucune_ expérience de prog (à part sur calculatrice HP48, il y a bien longtemps...)
Hum. Juste une chose. Soit tu sais que tu ne feras jamais que du langage de haut level come le python. Soit tu penses un jour faire du bas level comme le C et je te conseil vraiment de commencer dans l'autre sens.
Je t'explique. Quand tu maitrises un langage comme le C, quand tu passes à du haut level cela te simplifies le travail, mais tout ce que tu as apprit n'est pas perdu, juste simplifié, tourné differament.
Dans l'autre sens, tu vas te retrouver avec un langage qui ne gere que quelques types primaires alors que tu étais habitué à un langage avec enormement de types existants. Tu va te retrouvé à devoir geré toi même la mémoire alors que tu ignorais que cela doit bien se faire quelque part. Bref AMHA ce sens est une grande galère.
-- Guillaume.
remi wrote:
Bonjour,
Bonjour,
Merci beaucoup pour vos remarques. Elles m'ont beaucoup apporté.
De rien.
Je débute et n'ai _aucune_ expérience de prog (à part sur calculatrice
HP48, il y a bien longtemps...)
Hum. Juste une chose. Soit tu sais que tu ne feras jamais que du langage
de haut level come le python. Soit tu penses un jour faire du bas level
comme le C et je te conseil vraiment de commencer dans l'autre sens.
Je t'explique. Quand tu maitrises un langage comme le C, quand tu passes
à du haut level cela te simplifies le travail, mais tout ce que tu as
apprit n'est pas perdu, juste simplifié, tourné differament.
Dans l'autre sens, tu vas te retrouver avec un langage qui ne gere que
quelques types primaires alors que tu étais habitué à un langage avec
enormement de types existants. Tu va te retrouvé à devoir geré toi même
la mémoire alors que tu ignorais que cela doit bien se faire quelque
part. Bref AMHA ce sens est une grande galère.
Merci beaucoup pour vos remarques. Elles m'ont beaucoup apporté.
De rien.
Je débute et n'ai _aucune_ expérience de prog (à part sur calculatrice HP48, il y a bien longtemps...)
Hum. Juste une chose. Soit tu sais que tu ne feras jamais que du langage de haut level come le python. Soit tu penses un jour faire du bas level comme le C et je te conseil vraiment de commencer dans l'autre sens.
Je t'explique. Quand tu maitrises un langage comme le C, quand tu passes à du haut level cela te simplifies le travail, mais tout ce que tu as apprit n'est pas perdu, juste simplifié, tourné differament.
Dans l'autre sens, tu vas te retrouver avec un langage qui ne gere que quelques types primaires alors que tu étais habitué à un langage avec enormement de types existants. Tu va te retrouvé à devoir geré toi même la mémoire alors que tu ignorais que cela doit bien se faire quelque part. Bref AMHA ce sens est une grande galère.