cerhu > comp.lang.* > comp.lang.python

manelw80 (18/01/2017, 02h58)
Bonjour,

J'ai un fichier texte et dans ce fichier il y est écrit, entre autre: width:234px

et je veux remplacer par: width:23,4px

J'aimerais un code qui cherche cette donnée et après, par un calcul, on ferait:
234/10, et on remplace ce résultat dans le fichier, sans effacer le reste.

Voilà!
Nicolas (18/01/2017, 09h25)
Le 18/01/2017 à 01:58, manelw80 a écrit :
> Bonjour, Bonjour,
> J'ai un fichier texte et dans ce fichier il y est écrit, entre autre: width:234px
> et je veux remplacer par: width:23,4px
> J'aimerais un code qui cherche cette donnée et après, par un calcul, on ferait:
> 234/10, et on remplace ce résultat dans le fichier, sans effacer le reste.
> Voilà! Il y a tellement de possibilités...


Quel est le format de fichier ?

Si c'est un format connu, il est préférable d'utiliser des API dédiées
pour accéder aux données et les modifier.

Sinon :
- Le fichier à modifier est-il petit ?
- Y a t-il qu'une donnée à modifier ?
- Quelle est la structure générale du contenu du fichier ? (une donnée
par ligne ? nom toujours séparé de la valeur par ":" ? ...)

Un exemple de fichier, s'il n'est pas trop gros, serait utile pour aider
efficacement.
manelw80 (18/01/2017, 15h49)
Le mercredi 18 janvier 2017 08:25:06 UTC+1, Nicolas a écrit :
[..]
> par ligne ? nom toujours séparé de la valeur par ":" ? ...)
> Un exemple de fichier, s'il n'est pas trop gros, serait utile pour aider
> efficacement.


Alors, pour le format, c'est du txt.
le fichier est petit
plusieurs données sont à modifier
le fichier est comme un document html, il y a plein de code à l'intérieur

pour exemple, le contenu serait comme cela:

<html>
<button style="background-image:url(b6.gif), width:234px, height:345px"><b>blabla</b></button>
<div>......
......etc, etc
</html>
Doug713705 (18/01/2017, 19h56)
Le 18-01-2017, manelw80 nous expliquait dans
fr.comp.lang.python
(<42795358-e4b2-4e32-bca8-cf17f1a41646>) :

> Alors, pour le format, c'est du txt.
> le fichier est petit
> plusieurs données sont à modifier
> le fichier est comme un document html, il y a plein de code à l'intérieur
> pour exemple, le contenu serait comme cela:
><html>
><button style="background-image:url(b6.gif), width:234px, height:345px"><b>blabla</b></button>
><div>......
> .....etc, etc
></html>


Si la valeur est connue à l'avance (234px) et qu'elle est utilisée
uniquement aux endroits qui doivent recevoir la nouvelle valeur alors
sed peut suffir:

sed -i 's/width:234px, height:345px/width:23.4px, height:345px/g'

Attention l'option '-i' remplace directement dans le fichier.
Pour vérifier à l'écran avant de remplacer directement dans le fichier,
enlever l'option -i:

sed 's/width:234px, height:345px/width:23.4px, height:345px/g'
Nicolas (19/01/2017, 11h58)
Le 18/01/2017 à 14:49, manelw80 a écrit :
> Le mercredi 18 janvier 2017 08:25:06 UTC+1, Nicolas a écrit :
> le fichier est petit
> plusieurs données sont à modifier
> le fichier est comme un document html, il y a plein de code à l'intérieur
> pour exemple, le contenu serait comme cela:
> <html>
> <button style="background-image:url(b6.gif), width:234px, height:345px"><b>blabla</b></button>
> <div>......
> .....etc, etc
> </html>

Pour manipuler du HTML, il y a la librairie beautifulsoup. Un exemple
d'utilisation ici :
[..]

En texte pur, une expression régulière devrait faire le job. Mais là, je
peux pas aider. Les expressions régulières sont encore assez obscures
pour moi. Mais j'y travaille...

Sinon, y a une méthode bien bourrin mais qui peut faire le job :
- Charger tout le texte en mémoire
- Rechercher "width:"
- Rechercher "px" à partir du résultat précédent
- Récupérer la valeur à modifier à partir des résultats précédents
- Modifier le texte

Un exemple :

txt = """
<html>
<button style="background-image:url(b6.gif), width:234px,
height:345px"><b>blabla</b></button>
<div width:24px>
</html>
"""

def new_value(value):
return value[:-1] + "," + value[-1:]

patern = "width:"
start_index = 0
while start_index is not None :
index1 = txt.find(patern, start_index)
start_index = None
if index1 != -1 :
index1 = index1+len(patern)
index2 = txt.find("px", index1)
if index2 != -1 :
start_index = index2
value = txt[index1:index2]
txt_s = txt[:index1]
txt_e = txt[index2:]
txt = txt_s + new_value(value) + txt_e

print(txt)

Attention : c'est du bricolage ni ne fonctionnera pas dans tous les cas.
Entre autres, si "width :" est présent dans le fichier, ça ne "matchera"
pas avec "width:" et donc ne sera pas traité.
Discussions similaires
Lire le contenu d'un fichier WORD et en afficher le contenu dans une page WEB

Modifier le contenu d'un fichier

Modifier le contenu d'une cellule

[VBS] modifier contenu fichier texte


Fuseau horaire GMT +2. Il est actuellement 09h42. | Privacy Policy