OVH Cloud OVH Cloud

re et remplacer termes à termes

4 réponses
Avatar
remi
Bonjour,

Dans un fichier texte, je souhaite remplacer les \begin{enumerate} par
<ol>, \item par <li>, ...

J'ai écris ce bout de code :
#-------------
macros
[='\\begin{enumerate}','\end{enumerate}','\\begin{itemize}','\end{itemize}','\item']
html = ['<ol>','</ol>','<ul>','</ul>','<li>']

def rempl(t):
for txt in macros:
textc = re.compile(r'%s' %txt)
j = 0
for i in textc.findall(t):
htmltxt = html[j]
t = textc.sub(htmltxt,t,1)
j = j+1

print rempl(contents)
#------------------
contents est un fichier à la mode LaTeX simple du style

#----
\begin{itemize}
\item liste non ordonné
\item item suivant
\end{itemize}

et aussi une autre liste

\begin{enumerate}
\item liste numérotée : 1
\item c'est le 2 là !
\end{enumerate}
#----
Le prompt me renvoie "None", el problème semble venir de ma liste macros
et de textc...
Auriez-vous une idée d'amélioration ? Une doc ? (j'ai la doc de RE)
Merci.
Rémi/

4 réponses

Avatar
Sean McIlroy
je me demande si ceci vous interesserait:

http://pylatex.sourceforge.net/

peace
sean
Avatar
Amaury Forgeot d'Arc
Bonjour,
...

def rempl(t):
for txt in macros:
textc = re.compile(r'%s' %txt)
j = 0
for i in textc.findall(t):
htmltxt = html[j]
t = textc.sub(htmltxt,t,1)
j = j+1

print rempl(contents)
...

Le prompt me renvoie "None", el problème semble venir de ma liste macros
et de textc...
Auriez-vous une idée d'amélioration ? Une doc ? (j'ai la doc de RE)
Merci.
Rémi/


Ta fonction ne renvoie rien... Tu as sans doute oublié un "return t" à
la fin !

Amaury

Avatar
Guillaume Bouchard
remi wrote:
Bonjour,


Bonjour.

Dans un fichier texte, je souhaite remplacer les begin{enumerate} par
<ol>, item par <li>, ...


Ok. Comme on te l'a déjà repondu, inutile de reinventer la roue.
Cependant je vais esseyer de corriger quelques erreurs qut tu as faites.


J'ai écris ce bout de code :
#-------------
macros
[='begin{enumerate}','end{enumerate}','begin{itemize}','end{itemize}','item']

html = ['<ol>','</ol>','<ul>','</ul>','<li>']


On va consideré que ton document LaTeX est Valide, ce qui semble logique
de la part d'une document LateX et qui nous evitera bien des ennuis. De
plus c'est exactement ce que tu fais, mais mal avec re.

def rempl(t):
for txt in macros:
textc = re.compile(r'%s' %txt)
j = 0
for i in textc.findall(t):
htmltxt = html[j]
t = textc.sub(htmltxt,t,1)
j = j+1



Oulà, déjà cela fait peur, maitenant c'est inutile :

Il ne faut JAMAIS utiliser des 'regular expression' (la traduction
française ne m'a jamais plu) pour faire du simple remplacement.

Voila comment je ferais ton script, en 1 ligne, mais tu peux le faire en
plus :)

txt = open('file.tex').read()

replace = (
('begin{enumerate}','<ol>'),
('end{enumerate}','</ol>'),
('begin{itemize}','<ul>'),
('end{itemize}','</ul>'),
('item','<li>'))

for i in replace:
txt = txt.replace(i[0],i[1])

Maitenant cela risque de te generé du html invalide dans le cas de
item, voici comment je ferais. ici un re est utile :

p = re.compile(r'item (.*?)''n')
txt = p.sub(r'<li>1</li>',txt)

--
Guillaume.

Avatar
remi
je me demande si ceci vous interesserait:

http://pylatex.sourceforge.net/


Oui ! Excellent, merci !
En plus, c'est libre et les sources seront un bon terrain
d'apprentissage. C'est de la pure POO on dirait.
Parfait.
Rémi.