Derniers messages sur Zeste de Savoirhttps://zestedesavoir.com/forums/2020-04-08T19:41:53+02:00Les derniers messages parus sur le forum de Zeste de Savoir.Découpage de chaînes de caractéres, message #2186312020-04-08T19:41:53+02:00lemarec/@lemarechttps://zestedesavoir.com/forums/sujet/13852/decoupage-de-chaines-de-caracteres/?page=1#p218631<p>Bonjour</p>
<p>Après pas mal de recherche, d’échecs et d’insatisfactions, voici un code que j’ai conçu moi même qui à partir d’un code sorti d’un GTK Textview (ici data, ou data1,2,3 en jouant sur les moms) un peu modifié, génère un fichier .odt avec conservation de la mise en page(gras, souligné, …) Ce n’est surement pas 100% débugé mais ça peut donner une base de travail.</p>
<p>Merci pour les aides</p>
<div class="hljs-code-div"><div class="hljs-line-numbers"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></div><pre><code class="hljs language-py"><span class="hljs-comment">#coding: utf-8</span>
<span class="hljs-keyword">from</span> PyQt5 <span class="hljs-keyword">import</span> QtGui,QtCore
<span class="hljs-keyword">from</span> pprint <span class="hljs-keyword">import</span> pprint
tag=<span class="hljs-string">""</span>
debug=<span class="hljs-literal">True</span>
tags=[]
tags.append(<span class="hljs-string">"normal"</span>)
newdata=<span class="hljs-string">""</span>
data1=<span class="hljs-string">"""<text><apply_tag name="underline">et la <apply_tag name="red">couleur </apply_tag>au <apply_tag name="bold">gras</apply_tag> milieu </apply_tag>non souligné <br>Le gras est dans<apply_tag name="italic"> l'it<apply_tag name="bold">al</apply_tag>ique</apply_tag><br></text>"""</span>
data3=<span class="hljs-string">"""<br><text><apply_tag name="underline">et la <apply_tag name="red">couleur </apply_tag>au <apply_tag name="bold">gras</apply_tag> milieu </apply_tag>non souligné <br>Le gras est dans<apply_tag name="italic"> l'it<apply_tag name="bold">al</apply_tag>ique</apply_tag><br><br><apply_tag name="titre">Titre</apply_tag><br><apply_tag name="stitre1">Sous Titre 1</apply_tag><br><apply_tag name="stitre2">Sous Titre 2</apply_tag><br><apply_tag name="underline">underline</apply_tag><br><apply_tag name="italic">italic</apply_tag><br><apply_tag name="bold">gras</apply_tag><br><apply_tag name="strikethrough">barré</apply_tag><br><apply_tag name="left">left</apply_tag><br><apply_tag name="centre">center</apply_tag><br><apply_tag name="right">right</apply_tag><br><br><br><apply_tag name="size10">10</apply_tag><br><apply_tag name="size11">11</apply_tag><br><apply_tag name="size12">12</apply_tag><br><apply_tag name="size13">13</apply_tag><br><apply_tag name="size14">14</apply_tag><br><apply_tag name="size15">15</apply_tag><br><br><apply_tag name="bold">Début du gras<br>celle la aussi est en gras, fin du gras</apply_tag><br><apply_tag name="blue">bleu</apply_tag><br><apply_tag name="green">vert</apply_tag><br><apply_tag name="yellow">jaune</apply_tag></text><br>"""</span>
data2=<span class="hljs-string">"""<br><text><apply_tag name="titre">Thème : Gtk_&_Python / Lettre L</apply_tag><apply_tag name="size12"><br><br></apply_tag><apply_tag name="titre">Listes :</apply_tag><apply_tag name="size12"><br><br></apply_tag><apply_tag name="stitre1">Recherche dans une liste</apply_tag><br><apply_tag name="size12"><br>liste.index(valeur) : renvoie l'index de la valeur trouvé dazns la liste (le plus petit), une erreur si non trouvé<br>liste[i] : renvoie la i ème valeur dans la liste<br>liste[0] : 1ère valeur<br>liste[-1] : dernière valeur<br><br></apply_tag><apply_tag name="stitre1">Tester si un élément est dans une liste : avec 'in' ou 'not in'</apply_tag><apply_tag name="size12"><br>print(valeur in liste) renvoie True ou False<br><br></apply_tag></text><br>"""</span>
data= <span class="hljs-string">"""<br><text><apply_tag name="titre">Thème : Equipements / Lettre P</apply_tag><br><br><apply_tag name="stitre1">PORTABLE :</apply_tag><br><br><apply_tag name="blue"><apply_tag name="size15">ACER V15 Nitro VN7-592G-72G4</apply_tag></apply_tag><br><br><apply_tag name="stitre2">SSD :</apply_tag><br><br>SSD Origine Samsung PM871 M.2 SATA MZNLM256HCCP-00000 format 2280 (un peu en dessous 850 EVO)<br><br>SSD Crucial : Bien mais chauffe 75€<br>SSD WD Black : trés bien<br>SSD Samsung 860 Evo : 100€<br>SSD Corsair moyen<br><br><apply_tag name="stitre2">Ram :</apply_tag><br><br>DDR4-2400 (ou+) SODIMM<br><br><br><br><br><br><br></text><br>"""</span>
<span class="hljs-comment"># Create a document object</span>
doc = QtGui.QTextDocument()
<span class="hljs-comment"># Create a cursor pointing to the beginning of the document</span>
cursor = QtGui.QTextCursor(doc)
<span class="hljs-comment"># Définition du format pour les textes du QText</span>
current_format=QtGui.QTextCharFormat()
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">setTitre</span><span class="hljs-params">(state)</span>:</span>
<span class="hljs-keyword">if</span> state:
current_format.setBackground(QtCore.Qt.gray)
setBold(<span class="hljs-literal">True</span>)
setUnderline(<span class="hljs-literal">True</span>)
setSizePoint(<span class="hljs-number">18</span>)
<span class="hljs-keyword">else</span>:
current_format.setBackground(QtCore.Qt.white)
setBold(<span class="hljs-literal">False</span>)
setUnderline(<span class="hljs-literal">False</span>)
setSizePoint(<span class="hljs-number">12</span>)
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">setSTitre1</span><span class="hljs-params">(state)</span>:</span>
<span class="hljs-keyword">if</span> state:
current_format.setBackground(QtCore.Qt.lightGray)
setBold(<span class="hljs-literal">False</span>)
setUnderline(<span class="hljs-literal">True</span>)
setSizePoint(<span class="hljs-number">15</span>)
<span class="hljs-keyword">else</span>:
current_format.setBackground(QtCore.Qt.white)
setBold(<span class="hljs-literal">False</span>)
setUnderline(<span class="hljs-literal">False</span>)
setSizePoint(<span class="hljs-number">12</span>)
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">setSTitre2</span><span class="hljs-params">(state)</span>:</span>
<span class="hljs-comment">#print("<<<<<<<<< tag stitre2 (",state,") >>>>>>>")</span>
<span class="hljs-keyword">if</span> state:
setBold(<span class="hljs-literal">True</span>)
setUnderline(<span class="hljs-literal">False</span>)
setSizePoint(<span class="hljs-number">15</span>)
<span class="hljs-keyword">else</span>:
setBold(<span class="hljs-literal">False</span>)
setUnderline(<span class="hljs-literal">False</span>)
setSizePoint(<span class="hljs-number">12</span>)
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">setSizePoint</span><span class="hljs-params">(size)</span>:</span>
current_format.setFontPointSize(size)
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">setBold</span><span class="hljs-params">(state)</span>:</span>
<span class="hljs-keyword">if</span> state:
current_format.setFontWeight(QtGui.QFont.Bold)
<span class="hljs-keyword">else</span>:
current_format.setFontWeight(QtGui.QFont.Normal)
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">setItalic</span><span class="hljs-params">(state)</span>:</span>
<span class="hljs-keyword">if</span> state:
current_format.setFontItalic(<span class="hljs-literal">True</span>)
<span class="hljs-keyword">else</span>:
current_format.setFontItalic(<span class="hljs-literal">False</span>)
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">setStrike</span><span class="hljs-params">(state)</span>:</span>
current_format.setFontStrikeOut(state)
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">setUnderline</span><span class="hljs-params">(state)</span>:</span>
<span class="hljs-comment">#print("<<<<<<<<< tag underline (",state,") >>>>>>>")</span>
<span class="hljs-keyword">if</span> state:
current_format.setUnderlineStyle(QtGui.QTextCharFormat.SingleUnderline)
<span class="hljs-keyword">else</span>:
current_format.setUnderlineStyle(QtGui.QTextCharFormat.NoUnderline)
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">setRed</span><span class="hljs-params">(state)</span>:</span>
<span class="hljs-comment">#print("<<<<<<<<< tag red (",state,") >>>>>>>")</span>
<span class="hljs-keyword">if</span> state:
current_format.setForeground(QtCore.Qt.red)
<span class="hljs-keyword">else</span>:
current_format.setForeground(QtCore.Qt.black)
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">setBlue</span><span class="hljs-params">(state)</span>:</span>
<span class="hljs-comment">#print("<<<<<<<<< tag blue (",state,") >>>>>>>")</span>
<span class="hljs-keyword">if</span> state:
current_format.setForeground(QtCore.Qt.blue)
<span class="hljs-keyword">else</span>:
current_format.setForeground(QtCore.Qt.black)
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">setGreen</span><span class="hljs-params">(state)</span>:</span>
<span class="hljs-comment">#print("<<<<<<<<< tag blue (",state,") >>>>>>>")</span>
<span class="hljs-keyword">if</span> state:
current_format.setForeground(QtCore.Qt.green)
<span class="hljs-keyword">else</span>:
current_format.setForeground(QtCore.Qt.black)
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">setYellow</span><span class="hljs-params">(state)</span>:</span>
<span class="hljs-comment">#print("<<<<<<<<< tag blue (",state,") >>>>>>>")</span>
<span class="hljs-keyword">if</span> state:
current_format.setForeground(QtCore.Qt.yellow)
<span class="hljs-keyword">else</span>:
current_format.setForeground(QtCore.Qt.black)
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">setNormal</span><span class="hljs-params">()</span>:</span>
<span class="hljs-comment">#print("<<<<<<<<< tag Normal >>>>>>>")</span>
setUnderline(<span class="hljs-literal">False</span>)
setItalic(<span class="hljs-literal">False</span>)
setBold(<span class="hljs-literal">False</span>)
setStrike(<span class="hljs-literal">False</span>)
setSizePoint(<span class="hljs-number">12</span>)
<span class="hljs-comment">#Alignment</span>
center_format=QtGui.QTextBlockFormat()
center_format.setAlignment(QtCore.Qt.AlignCenter)
right_format=QtGui.QTextBlockFormat()
right_format.setAlignment(QtCore.Qt.AlignRight)
left_format=QtGui.QTextBlockFormat()
left_format.setAlignment(QtCore.Qt.AlignLeft)
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">setTags</span><span class="hljs-params">()</span>:</span>
<span class="hljs-keyword">if</span> len(tags)!=<span class="hljs-number">0</span>:
<span class="hljs-keyword">if</span> tags[<span class="hljs-number">-1</span>]==<span class="hljs-string">"titre"</span>:
setTitre(<span class="hljs-literal">True</span>)
<span class="hljs-keyword">if</span> tags[<span class="hljs-number">-1</span>]==<span class="hljs-string">"stitre1"</span>:
setSTitre1(<span class="hljs-literal">True</span>)
<span class="hljs-keyword">if</span> tags[<span class="hljs-number">-1</span>]==<span class="hljs-string">"stitre2"</span>:
setSTitre2(<span class="hljs-literal">True</span>)
<span class="hljs-keyword">if</span> tags[<span class="hljs-number">-1</span>]==<span class="hljs-string">"centre"</span>:
cursor.setBlockFormat(center_format)
<span class="hljs-keyword">if</span> tags[<span class="hljs-number">-1</span>]==<span class="hljs-string">"right"</span>:
cursor.setBlockFormat(right_format)
<span class="hljs-keyword">if</span> tags[<span class="hljs-number">-1</span>]==<span class="hljs-string">"normal"</span>:
setNormal()
<span class="hljs-keyword">if</span> tags[<span class="hljs-number">-1</span>]==<span class="hljs-string">"italic"</span>:
setItalic(<span class="hljs-literal">True</span>)
<span class="hljs-keyword">if</span> tags[<span class="hljs-number">-1</span>]==<span class="hljs-string">"bold"</span>:
setBold(<span class="hljs-literal">True</span>)
<span class="hljs-keyword">if</span> tags[<span class="hljs-number">-1</span>]==<span class="hljs-string">"underline"</span>:
setUnderline(<span class="hljs-literal">True</span>)
<span class="hljs-keyword">if</span> tags[<span class="hljs-number">-1</span>]==<span class="hljs-string">"strikethrough"</span>:
setStrike(<span class="hljs-literal">True</span>)
<span class="hljs-keyword">if</span> tags[<span class="hljs-number">-1</span>]==<span class="hljs-string">"red"</span>:
setRed(<span class="hljs-literal">True</span>)
<span class="hljs-keyword">if</span> tags[<span class="hljs-number">-1</span>]==<span class="hljs-string">"blue"</span>:
setBlue(<span class="hljs-literal">True</span>)
<span class="hljs-keyword">if</span> tags[<span class="hljs-number">-1</span>]==<span class="hljs-string">"green"</span>:
setGreen(<span class="hljs-literal">True</span>)
<span class="hljs-keyword">if</span> tags[<span class="hljs-number">-1</span>]==<span class="hljs-string">"yellow"</span>:
setYellow(<span class="hljs-literal">True</span>)
<span class="hljs-keyword">if</span> tags[<span class="hljs-number">-1</span>]==<span class="hljs-string">"size10"</span>:
setSizePoint(<span class="hljs-number">10</span>)
<span class="hljs-keyword">if</span> tags[<span class="hljs-number">-1</span>]==<span class="hljs-string">"size11"</span>:
setSizePoint(<span class="hljs-number">11</span>)
<span class="hljs-keyword">if</span> tags[<span class="hljs-number">-1</span>]==<span class="hljs-string">"size12"</span>:
setSizePoint(<span class="hljs-number">12</span>)
<span class="hljs-keyword">if</span> tags[<span class="hljs-number">-1</span>]==<span class="hljs-string">"size13"</span>:
setSizePoint(<span class="hljs-number">13</span>)
<span class="hljs-keyword">if</span> tags[<span class="hljs-number">-1</span>]==<span class="hljs-string">"size14"</span>:
setSizePoint(<span class="hljs-number">14</span>)
<span class="hljs-keyword">if</span> tags[<span class="hljs-number">-1</span>]==<span class="hljs-string">"size15"</span>:
setSizePoint(<span class="hljs-number">15</span>)
<span class="hljs-keyword">else</span>:
setNormal()
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">setUnTags</span><span class="hljs-params">()</span>:</span>
<span class="hljs-keyword">if</span> tags[<span class="hljs-number">-1</span>]==<span class="hljs-string">"titre"</span>:
setTitre(<span class="hljs-literal">False</span>)
<span class="hljs-keyword">if</span> tags[<span class="hljs-number">-1</span>]==<span class="hljs-string">"stitre1"</span>:
setSTitre1(<span class="hljs-literal">False</span>)
<span class="hljs-keyword">if</span> tags[<span class="hljs-number">-1</span>]==<span class="hljs-string">"stitre2"</span>:
setSTitre2(<span class="hljs-literal">False</span>)
<span class="hljs-keyword">if</span> tags[<span class="hljs-number">-1</span>]==<span class="hljs-string">"centre"</span>:
cursor.insertBlock(left_format)
<span class="hljs-keyword">if</span> tags[<span class="hljs-number">-1</span>]==<span class="hljs-string">"right"</span>:
cursor.insertBlock(left_format)
<span class="hljs-keyword">if</span> tags[<span class="hljs-number">-1</span>]==<span class="hljs-string">"underline"</span>:
setUnderline(<span class="hljs-literal">False</span>)
<span class="hljs-keyword">if</span> tags[<span class="hljs-number">-1</span>]==<span class="hljs-string">"strikethrough"</span>:
setStrike(<span class="hljs-literal">False</span>)
<span class="hljs-keyword">if</span> tags[<span class="hljs-number">-1</span>]==<span class="hljs-string">"italic"</span>:
setItalic(<span class="hljs-literal">False</span>)
<span class="hljs-keyword">if</span> tags[<span class="hljs-number">-1</span>]==<span class="hljs-string">"bold"</span>:
setBold(<span class="hljs-literal">False</span>)
<span class="hljs-keyword">if</span> tags[<span class="hljs-number">-1</span>]==<span class="hljs-string">"red"</span>:
setRed(<span class="hljs-literal">False</span>)
<span class="hljs-keyword">if</span> tags[<span class="hljs-number">-1</span>]==<span class="hljs-string">"blue"</span>:
setBlue(<span class="hljs-literal">False</span>)
<span class="hljs-keyword">if</span> tags[<span class="hljs-number">-1</span>]==<span class="hljs-string">"green"</span>:
setGreen(<span class="hljs-literal">False</span>)
<span class="hljs-keyword">if</span> tags[<span class="hljs-number">-1</span>]==<span class="hljs-string">"yellow"</span>:
setYellow(<span class="hljs-literal">False</span>)
<span class="hljs-keyword">if</span> tags[<span class="hljs-number">-1</span>]==<span class="hljs-string">"size10"</span>:
setSizePoint(<span class="hljs-number">12</span>)
<span class="hljs-keyword">if</span> tags[<span class="hljs-number">-1</span>]==<span class="hljs-string">"size11"</span>:
setSizePoint(<span class="hljs-number">12</span>)
<span class="hljs-keyword">if</span> tags[<span class="hljs-number">-1</span>]==<span class="hljs-string">"size13"</span>:
setSizePoint(<span class="hljs-number">12</span>)
<span class="hljs-keyword">if</span> tags[<span class="hljs-number">-1</span>]==<span class="hljs-string">"size14"</span>:
setSizePoint(<span class="hljs-number">12</span>)
<span class="hljs-keyword">if</span> tags[<span class="hljs-number">-1</span>]==<span class="hljs-string">"size15"</span>:
setSizePoint(<span class="hljs-number">12</span>)
<span class="hljs-comment">######################################### </span>
<span class="hljs-comment"># Préparation des données à sauvegarder #</span>
<span class="hljs-comment">#########################################</span>
<span class="hljs-comment">#pprint(data)</span>
<span class="hljs-keyword">if</span> debug: print(<span class="hljs-string">"Data:"</span>,data)
<span class="hljs-comment"># Enlever les '<br>' éventuels en début et en fin</span>
<span class="hljs-keyword">if</span> data.find(<span class="hljs-string">'<br>'</span>)==<span class="hljs-number">0</span>:
<span class="hljs-comment">#print("br au début")</span>
data=data[<span class="hljs-number">4</span>:]
<span class="hljs-keyword">if</span> data[<span class="hljs-number">-1</span>]==<span class="hljs-string">">"</span> <span class="hljs-keyword">and</span> data[<span class="hljs-number">-2</span>]==<span class="hljs-string">"r"</span> <span class="hljs-keyword">and</span> data[<span class="hljs-number">-3</span>]==<span class="hljs-string">"b"</span> <span class="hljs-keyword">and</span> data[<span class="hljs-number">-4</span>]==<span class="hljs-string">"<"</span>:
<span class="hljs-comment">#print("br a la fin")</span>
data=data[:len(data)<span class="hljs-number">-4</span>]
<span class="hljs-comment"># Enlever les balises '<text>" el les '<br>' en double</span>
data=data.replace(<span class="hljs-string">"<text>"</span>,<span class="hljs-string">""</span>)
data=data.replace(<span class="hljs-string">"</text>"</span>,<span class="hljs-string">""</span>)
data=data.replace(<span class="hljs-string">"<br><br><br><br><br><br>"</span>,<span class="hljs-string">"<br>"</span>)
data=data.replace(<span class="hljs-string">"<br><br><br><br><br>"</span>,<span class="hljs-string">"<br>"</span>)
data=data.replace(<span class="hljs-string">"<br><br><br><br>"</span>,<span class="hljs-string">"<br>"</span>)
data=data.replace(<span class="hljs-string">"<br><br><br>"</span>,<span class="hljs-string">"<br>"</span>)
data=data.replace(<span class="hljs-string">"<br><br>"</span>,<span class="hljs-string">"<br>"</span>)
<span class="hljs-comment"># Enlever les '<br>' éventuels en début et en fin aprés suppression des balises '<text>'</span>
<span class="hljs-keyword">if</span> data.find(<span class="hljs-string">'<br>'</span>)==<span class="hljs-number">0</span>:
<span class="hljs-comment">#print("br au début")</span>
data=data[<span class="hljs-number">4</span>:]
<span class="hljs-keyword">if</span> data[<span class="hljs-number">-1</span>]==<span class="hljs-string">">"</span> <span class="hljs-keyword">and</span> data[<span class="hljs-number">-2</span>]==<span class="hljs-string">"r"</span> <span class="hljs-keyword">and</span> data[<span class="hljs-number">-3</span>]==<span class="hljs-string">"b"</span> <span class="hljs-keyword">and</span> data[<span class="hljs-number">-4</span>]==<span class="hljs-string">"<"</span>:
<span class="hljs-comment">#print("br a la fin")</span>
data=data[:len(data)<span class="hljs-number">-4</span>]
<span class="hljs-comment"># nettoyage des balises innutiles et génantes</span>
data=data.replace(<span class="hljs-string">'<apply_tag name="size12"><br><br></apply_tag>'</span>,<span class="hljs-string">"<br>"</span>) <span class="hljs-comment"># new</span>
data=data.replace(<span class="hljs-string">'<apply_tag name="size12"><br></apply_tag>'</span>,<span class="hljs-string">"<br>"</span>) <span class="hljs-comment"># new</span>
data=data.replace(<span class="hljs-string">'<apply_tag name="size12"></apply_tag>'</span>,<span class="hljs-string">""</span>) <span class="hljs-comment"># new</span>
<span class="hljs-keyword">if</span> debug: print(<span class="hljs-string">"Data aprés filtrage :("</span>,data,<span class="hljs-string">")\n"</span>)
i=<span class="hljs-number">0</span>
depart=<span class="hljs-literal">True</span>
<span class="hljs-keyword">while</span> depart:
i+=<span class="hljs-number">1</span>
<span class="hljs-comment"># empiler le premier tag </span>
<span class="hljs-keyword">if</span> debug: print(<span class="hljs-string">"Initial :"</span>,data,<span class="hljs-string">" boucle : "</span>,i)
t0=data.find(<span class="hljs-string">"<"</span>)
t1=data.find(<span class="hljs-string">">"</span>)
t2=data.find(<span class="hljs-string">"/"</span>)
<span class="hljs-keyword">if</span> debug: print(<span class="hljs-string">"< en position :"</span>,t0,<span class="hljs-string">"- > en position :"</span>,t1,<span class="hljs-string">"- / en position :"</span>,t2)
<span class="hljs-comment">#print(element[t0:t1+1])</span>
<span class="hljs-keyword">if</span> data.find(<span class="hljs-string">'<br>'</span>)==<span class="hljs-number">0</span>:
<span class="hljs-keyword">if</span> debug: <span class="hljs-keyword">print</span> (<span class="hljs-string">"l'élément suivant est un '<br>' "</span>)
cursor.insertText(<span class="hljs-string">"\n"</span>)
data=data[<span class="hljs-number">4</span>:]
<span class="hljs-keyword">else</span>:
<span class="hljs-keyword">if</span> t0==<span class="hljs-number">0</span> <span class="hljs-keyword">and</span> t2>t1:
<span class="hljs-keyword">if</span> debug: <span class="hljs-keyword">print</span> (<span class="hljs-string">"l'élément suivant est un tag : "</span>,data[t0:t1+<span class="hljs-number">1</span>],<span class="hljs-string">"- Tous les tags :"</span>,tags)
<span class="hljs-comment"># Quel tag ?</span>
tagbrut=data[t0:t1+<span class="hljs-number">1</span>]
tb0=tagbrut.find(<span class="hljs-string">'='</span>)
tb1=tagbrut.find(<span class="hljs-string">'>'</span>)
tag=tagbrut[tb0+<span class="hljs-number">2</span>:tb1<span class="hljs-number">-1</span>]
tags.append(tag) <span class="hljs-comment"># ajout du tag à la liste des tags appliqués ou à appliquer</span>
<span class="hljs-keyword">if</span> debug: <span class="hljs-keyword">print</span> (<span class="hljs-string">"les tags aprés ajout tag trouvé :"</span>,tags)
<span class="hljs-comment"># En fonction des tags retenus on applique le style</span>
setTags()
data=data[t1+<span class="hljs-number">1</span>:]
<span class="hljs-keyword">if</span> t0><span class="hljs-number">0</span> <span class="hljs-keyword">or</span> t0==<span class="hljs-number">-1</span>:
<span class="hljs-keyword">if</span> debug: <span class="hljs-keyword">print</span> (<span class="hljs-string">"l'élément suivant est un texte : "</span>,data[:t0])
<span class="hljs-keyword">if</span> t0><span class="hljs-number">0</span>:
texte=data[:t0]
data=data[t0:]
<span class="hljs-keyword">else</span>:
texte=data
<span class="hljs-keyword">if</span> debug: print(<span class="hljs-string">"Texte restant : "</span>,texte)
depart=<span class="hljs-literal">False</span>
setTags()
<span class="hljs-keyword">if</span> len(tags)!=<span class="hljs-number">0</span>:
<span class="hljs-keyword">if</span> tags[<span class="hljs-number">-1</span>]==<span class="hljs-string">"centre"</span>:
cursor.insertText(texte)
<span class="hljs-keyword">else</span>:
cursor.insertText(texte,current_format)
<span class="hljs-keyword">else</span>:
cursor.insertText(texte)
<span class="hljs-keyword">if</span> t2<t1 <span class="hljs-keyword">and</span> t0==<span class="hljs-number">0</span>:
<span class="hljs-keyword">if</span> debug: print(<span class="hljs-string">"l'élement suivant est une fermeture de tag"</span>,data,<span class="hljs-string">" - Longueur restante : "</span>,len(data))
<span class="hljs-comment">#cursor.insertText("( DT "+tags[-1]+")")</span>
<span class="hljs-comment">#enlever le dernier tag du formatage</span>
setUnTags()
tag=data[t0:t1+<span class="hljs-number">1</span>]
tags=tags[:<span class="hljs-number">-1</span>]
data=data[t1+<span class="hljs-number">1</span>:]
<span class="hljs-keyword">if</span> len(data)==<span class="hljs-number">12</span>:
depart=<span class="hljs-literal">False</span>
<span class="hljs-keyword">if</span> i>=<span class="hljs-number">1000</span>: depart=<span class="hljs-literal">False</span>
<span class="hljs-comment"># Create a writer to save the document</span>
writer = QtGui.QTextDocumentWriter()
writer.supportedDocumentFormats()
odf_format = writer.supportedDocumentFormats()
writer.setFormat(odf_format[<span class="hljs-number">1</span>])
writer.setFileName(<span class="hljs-string">'hello_world.odt'</span>)
writer.write(doc) <span class="hljs-comment"># Return True if successful</span>
<span class="hljs-keyword">if</span> debug: print(<span class="hljs-string">"FIN DE TRAITEMENT à "</span>,i,<span class="hljs-string">" boucles."</span>)
<span class="hljs-literal">True</span>
</code></pre></div>Découpage de chaînes de caractéres, message #2182032020-04-02T20:33:00+02:00lemarec/@lemarechttps://zestedesavoir.com/forums/sujet/13852/decoupage-de-chaines-de-caracteres/?page=1#p218203<p>Merci, il faut aussi que je récupère les types de balise aussi afin de formater mon fichier odf
dans mon scrypt tag.text contient le texte de mes balises</p>Découpage de chaînes de caractéres, message #2182002020-04-02T20:15:02+02:00entwanne/@entwannehttps://zestedesavoir.com/forums/sujet/13852/decoupage-de-chaines-de-caracteres/?page=1#p218200<figure><blockquote>
<p>au final vu que j’utilise beautifulsoup dans une boucle qui me donne les différents tags</p>
</blockquote><figcaption><a href="https://zestedesavoir.com/forums/sujet/13852/decoupage-de-chaines-de-caracteres/?page=1#p218197">lemarec</a></figcaption></figure>
<p>Salut,</p>
<p>Au final Beautifulsoup est simplement un <em>wrapper</em> autour d’une autre lib XML existante (lxml je crois).
Tu peux donc traiter directement ton document comme du XML et y appliquer les opérations habituelles.
Ici tu pourrais avoir une requête XPath <code>//text()</code> pour récupérer tous les nœuds texte du document.</p>
<p>Je suis un peu perdu avec les différents types, mais tu peux toujours essayer un <code>tag.xpath('//text()')</code> pour tous les éléments de ta liste <code>soupTags</code>.</p>Découpage de chaînes de caractéres, message #2181972020-04-02T19:20:53+02:00lemarec/@lemarechttps://zestedesavoir.com/forums/sujet/13852/decoupage-de-chaines-de-caracteres/?page=1#p218197<p>Bonjour et merci
au final vu que j’utilise beautifulsoup dans une boucle qui me donne les différents tags :</p>
<div class="hljs-code-div"><div class="hljs-line-numbers"><span></span></div><pre><code class="hljs language-crmsh">for <span class="hljs-keyword">tag</span> <span class="hljs-title">in</span> soupTags:
</code></pre></div>
<p>avec print(tag.text) j’obtiens le texte dans un tag</p>
<p>mon but final est de créer un fichier .odt en utilisant Qt et QtTextDocument
il faut que je décortique toutes les chaînes avec ou non des imbrications afin de recréer tous les éléments présent dans les balises avec un formatage correct; et la ça se complique !!!!</p>
<p>Ce qui me semble simple pour les chaines de type 1 devient complique pour le type 2 et 3 sans compter qu’au passage je perd les </br> avec BeautifullSoup</p>
<p>ma portion de code actuelle :</p>
<div class="hljs-code-div"><div class="hljs-line-numbers"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></div><pre><code class="hljs language-python"><span class="hljs-comment">#coding: utf-8</span>
<span class="hljs-keyword">from</span> bs4 <span class="hljs-keyword">import</span> BeautifulSoup
<span class="hljs-keyword">from</span> PyQt5 <span class="hljs-keyword">import</span> QtGui,QtCore
<span class="hljs-comment"># Create a document object</span>
doc = QtGui.QTextDocument()
<span class="hljs-comment"># Create a cursor pointing to the beginning of the document</span>
cursor = QtGui.QTextCursor(doc)
data =<span class="hljs-string">"""
<text><apply_tag name="titre">Thème : Equipements / Lettre A :</apply_tag><br><br>
<apply_tag name="bold">Note pour la lettre A</apply_tag>
<br><br><apply_tag name="underline">el la <apply_tag name="red">couleur </apply_tag>au <apply_tag name="bold">gras</apply_tag> milieu</apply_tag>
<br><br>le gras est dans<apply_tag name="italic"> l&apos;it<apply_tag name="bold">al</apply_tag>ique</apply_tag>
<br><br><apply_tag name="titre">Titre</apply_tag>
<br><apply_tag name="stitre1">Sous Titre 1</apply_tag>
<br><apply_tag name="stitre2">Sous Titre 2</apply_tag><br>
<apply_tag name="underline">underline</apply_tag><br>
<apply_tag name="italic">italic</apply_tag><br>
<apply_tag name="bold">gras</apply_tag><br>
<apply_tag name="strikethrough">barré</apply_tag>
<apply_tag name="left">left</apply_tag><br>
<apply_tag name="centre">center</apply_tag><br>
<apply_tag name="right">right</apply_tag><br><br>
<apply_tag name="size10">10</apply_tag><br>
<apply_tag name="size11">11</apply_tag><br>
<apply_tag name="size12">12</apply_tag><br>
<apply_tag name="size13">13</apply_tag><br>
<apply_tag name="size14">14</apply_tag><br>
<apply_tag name="size15">15</apply_tag></text>
"""</span>
soup = BeautifulSoup(data,features=<span class="hljs-string">"lxml"</span>)
soupTags = soup.find_all(<span class="hljs-string">'apply_tag'</span>)
<span class="hljs-keyword">for</span> tag <span class="hljs-keyword">in</span> soupTags:
<span class="hljs-keyword">if</span> tag[<span class="hljs-string">'name'</span>] == <span class="hljs-string">'bold'</span>:
print(tag)
print(str(tag).count(<span class="hljs-string">'<apply_tag'</span>))
<span class="hljs-comment"># pas d'imbrication => écriture du contenu ds fichier odf</span>
<span class="hljs-keyword">if</span> str(tag).count(<span class="hljs-string">'<apply_tag'</span>)==<span class="hljs-number">1</span>:
cursor.insertText(tag.text)
tag.name = <span class="hljs-string">'b'</span>
<span class="hljs-keyword">del</span> tag[<span class="hljs-string">'name'</span>]
<span class="hljs-keyword">elif</span> tag[<span class="hljs-string">'name'</span>] == <span class="hljs-string">'italic'</span>:
print(tag)
tag.name = <span class="hljs-string">'em'</span>
<span class="hljs-keyword">del</span> tag[<span class="hljs-string">'name'</span>]
<span class="hljs-keyword">elif</span> tag[<span class="hljs-string">'name'</span>] == <span class="hljs-string">'underline'</span>:
print(tag)
print(str(tag).count(<span class="hljs-string">'<apply_tag'</span>))
<span class="hljs-comment"># pas d'imbrication => écriture du contenu ds fichier odf</span>
<span class="hljs-keyword">if</span> str(tag).count(<span class="hljs-string">'<apply_tag'</span>)==<span class="hljs-number">1</span>:
cursor.insertText(tag.text)
tag.name = <span class="hljs-string">'u'</span>
<span class="hljs-keyword">del</span> tag[<span class="hljs-string">'name'</span>]
<span class="hljs-keyword">elif</span> tag[<span class="hljs-string">'name'</span>] == <span class="hljs-string">'strikethrough'</span>:
print(tag)
tag.name = <span class="hljs-string">'strike'</span>
<span class="hljs-keyword">del</span> tag[<span class="hljs-string">'name'</span>]
<span class="hljs-keyword">elif</span> tag[<span class="hljs-string">'name'</span>] == <span class="hljs-string">'centre'</span>:
print(tag)
tag.name = <span class="hljs-string">'div class="wa"'</span>
<span class="hljs-keyword">del</span> tag[<span class="hljs-string">'name'</span>]
<span class="hljs-keyword">elif</span> tag[<span class="hljs-string">'name'</span>] == <span class="hljs-string">'right'</span>:
print(tag)
tag.name = <span class="hljs-string">'div style="text-align: right;"'</span>
<span class="hljs-keyword">del</span> tag[<span class="hljs-string">'name'</span>]
<span class="hljs-keyword">elif</span> tag[<span class="hljs-string">'name'</span>] == <span class="hljs-string">'left'</span>:
print(tag)
tag.name = <span class="hljs-string">'p align="left"'</span>
<span class="hljs-keyword">del</span> tag[<span class="hljs-string">'name'</span>]
<span class="hljs-keyword">elif</span> tag[<span class="hljs-string">'name'</span>] == <span class="hljs-string">'titre'</span>:
print(tag)
tag.name = <span class="hljs-string">'h1'</span>
<span class="hljs-keyword">del</span> tag[<span class="hljs-string">'name'</span>]
<span class="hljs-keyword">elif</span> tag[<span class="hljs-string">'name'</span>] == <span class="hljs-string">'stitre1'</span>:
print(tag)
tag.name = <span class="hljs-string">'h2'</span>
<span class="hljs-keyword">del</span> tag[<span class="hljs-string">'name'</span>]
<span class="hljs-keyword">elif</span> tag[<span class="hljs-string">'name'</span>] == <span class="hljs-string">'stitre2'</span>:
print(tag)
tag.name = <span class="hljs-string">'h3'</span>
<span class="hljs-keyword">del</span> tag[<span class="hljs-string">'name'</span>]
<span class="hljs-keyword">elif</span> tag[<span class="hljs-string">'name'</span>] == <span class="hljs-string">'size'</span>:
print(tag)
tag.name = <span class="hljs-string">'span style="font-size:10px"'</span>
<span class="hljs-keyword">del</span> tag[<span class="hljs-string">'name'</span>]
<span class="hljs-keyword">elif</span> tag[<span class="hljs-string">'name'</span>] == <span class="hljs-string">'size10'</span>:
print(tag)
tag.name = <span class="hljs-string">'span style="font-size:10px"'</span>
<span class="hljs-keyword">del</span> tag[<span class="hljs-string">'name'</span>]
<span class="hljs-keyword">elif</span> tag[<span class="hljs-string">'name'</span>] == <span class="hljs-string">'size11'</span>:
print(tag)
tag.name = <span class="hljs-string">'span style="font-size:11px"'</span>
<span class="hljs-keyword">del</span> tag[<span class="hljs-string">'name'</span>]
<span class="hljs-keyword">elif</span> tag[<span class="hljs-string">'name'</span>] == <span class="hljs-string">'size12'</span>:
print(tag)
tag.name = <span class="hljs-string">'span style="font-size:12px"'</span>
<span class="hljs-keyword">del</span> tag[<span class="hljs-string">'name'</span>]
<span class="hljs-keyword">elif</span> tag[<span class="hljs-string">'name'</span>] == <span class="hljs-string">'size13'</span>:
print(tag)
tag.name = <span class="hljs-string">'span style="font-size:13px"'</span>
<span class="hljs-keyword">del</span> tag[<span class="hljs-string">'name'</span>]
<span class="hljs-keyword">elif</span> tag[<span class="hljs-string">'name'</span>] == <span class="hljs-string">'size14'</span>:
print(tag)
tag.name = <span class="hljs-string">'span style="font-size:14px"'</span>
<span class="hljs-keyword">del</span> tag[<span class="hljs-string">'name'</span>]
<span class="hljs-keyword">elif</span> tag[<span class="hljs-string">'name'</span>] == <span class="hljs-string">'size15'</span>:
print(tag)
tag.name = <span class="hljs-string">'span class="wa"'</span>
<span class="hljs-keyword">del</span> tag[<span class="hljs-string">'name'</span>]
<span class="hljs-keyword">elif</span> tag[<span class="hljs-string">'name'</span>] == <span class="hljs-string">'red'</span>:
print(tag)
tag.name = <span class="hljs-string">'span style="color:#FF0000;"'</span>
<span class="hljs-keyword">del</span> tag[<span class="hljs-string">'name'</span>]
<span class="hljs-comment"># Create a writer to save the document</span>
writer = QtGui.QTextDocumentWriter()
writer.supportedDocumentFormats()
odf_format = writer.supportedDocumentFormats()
writer.setFormat(odf_format[<span class="hljs-number">1</span>])
writer.setFileName(<span class="hljs-string">'hello_world.odt'</span>)
writer.write(doc) <span class="hljs-comment"># Return True if successful </span>
</code></pre></div>Découpage de chaînes de caractéres, message #2181932020-04-02T18:15:23+02:00kayou/@kayouhttps://zestedesavoir.com/forums/sujet/13852/decoupage-de-chaines-de-caracteres/?page=1#p218193<p>Bonjour,</p>
<p>tu peux utiliser le module <a href="https://docs.python.org/fr/3.6/library/re.html">re</a> </p>
<div class="hljs-code-div"><div class="hljs-line-numbers"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></div><pre><code class="hljs language-py">In [<span class="hljs-number">29</span>]: <span class="hljs-keyword">import</span> re
In [<span class="hljs-number">30</span>]: motif = re.compile(<span class="hljs-string">'<.+?>'</span>)
In [<span class="hljs-number">31</span>]: t1 = <span class="hljs-string">'<apply_tag name="bold">Note pour la lettre A</apply_tag>'</span>
In [<span class="hljs-number">32</span>]: motif.sub(<span class="hljs-string">''</span>, t1)
Out[<span class="hljs-number">32</span>]: <span class="hljs-string">'Note pour la lettre A'</span>
In [<span class="hljs-number">33</span>]: t2 = <span class="hljs-string">'''<apply_tag name="italic"> l'it<apply_tag name="bold">al</apply_tag>ique</apply_tag>'''</span>
In [<span class="hljs-number">34</span>]: motif.sub(<span class="hljs-string">''</span>, t2)
Out[<span class="hljs-number">34</span>]: <span class="hljs-string">" l'italique"</span>
</code></pre></div>
<p>Ce qui n’est pas evident c’est trouver le bon motif, l’exemple ci dessus supprimera aussi le texte "<k>" alors que ce n’est pas une balise, le '?' dans le motif lui évite d’être gourmand (ici sans le '?' ca supprimerait toute la chaine) </p>Découpage de chaînes de caractéres, message #2181872020-04-02T16:49:03+02:00lemarec/@lemarechttps://zestedesavoir.com/forums/sujet/13852/decoupage-de-chaines-de-caracteres/?page=1#p218187<p>Bonjour</p>
<p>j’ai des chaines de différents type :</p>
<p>type 1 : </p>
<div class="hljs-code-div"><div class="hljs-line-numbers"><span></span></div><pre><code class="hljs language-html"><span class="hljs-tag"><<span class="hljs-name">apply_tag</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"bold"</span>></span>Note pour la lettre A<span class="hljs-tag"></<span class="hljs-name">apply_tag</span>></span>
</code></pre></div>
<p>Type 2 :</p>
<div class="hljs-code-div"><div class="hljs-line-numbers"><span></span></div><pre><code class="hljs language-html"><span class="hljs-tag"><<span class="hljs-name">apply_tag</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"italic"</span>></span> l'it<span class="hljs-tag"><<span class="hljs-name">apply_tag</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"bold"</span>></span>al<span class="hljs-tag"></<span class="hljs-name">apply_tag</span>></span>ique<span class="hljs-tag"></<span class="hljs-name">apply_tag</span>></span>
</code></pre></div>
<p>Type 3 :</p>
<div class="hljs-code-div"><div class="hljs-line-numbers"><span></span></div><pre><code class="hljs language-html"><span class="hljs-tag"><<span class="hljs-name">apply_tag</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"underline"</span>></span>el la <span class="hljs-tag"><<span class="hljs-name">apply_tag</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"red"</span>></span>couleur <span class="hljs-tag"></<span class="hljs-name">apply_tag</span>></span>au <span class="hljs-tag"><<span class="hljs-name">apply_tag</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"bold"</span>></span>gras<span class="hljs-tag"></<span class="hljs-name">apply_tag</span>></span> milieu<span class="hljs-tag"></<span class="hljs-name">apply_tag</span>></span>
</code></pre></div>
<p>je cherche :
pour le type 1 à extraire juste le texte entre > et <
pour le type 2 et 3 à extraire les différents texte entre > et < avec des imbrications différentes</p>
<p>Merci d’avance</p>
<p>Remarque : les différentes chaînes sont donnés par une boucle BeautifulSoup</p>