Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

modifier contenu d'un fichier

4 réponses
Avatar
manelw80
Bonjour,

J'ai un fichier texte et dans ce fichier il y est =C3=A9crit, entre autre: =
width:234px

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

J'aimerais un code qui cherche cette donn=C3=A9e et apr=C3=A8s, par un calc=
ul, on ferait:
234/10, et on remplace ce r=C3=A9sultat dans le fichier, sans effacer le re=
ste.

Voil=C3=A0!

4 réponses

Avatar
Nicolas
Le 18/01/2017 à 01:58, 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.
Avatar
manelw80
Le mercredi 18 janvier 2017 08:25:06 UTC+1, Nicolas a écrit :
Le 18/01/2017 à 01:58, a écrit :
Bonjour,
Bonjour,
J'ai un fichier texte et dans ce fichier il y est écrit, entre aut re: 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 l e 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.

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>
Avatar
Doug713705
Le 18-01-2017, nous expliquait dans
fr.comp.lang.python
() :
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'
--
Ça peut durer jusqu'à toujours
A moins que l'on ait le courage
De se dire merde un beau jour
Et de mettre fin au naufrage
-- H.F. Thiéfaine, La dèche, le twist et le reste
Avatar
Nicolas
Le 18/01/2017 à 14:49, a écrit :
Le mercredi 18 janvier 2017 08:25:06 UTC+1, Nicolas a écrit :
Le 18/01/2017 à 01:58, 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.

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>

Pour manipuler du HTML, il y a la librairie beautifulsoup. Un exemple
d'utilisation ici :
http://apprendre-python.com/page-beautifulsoup-html-parser-python-library-xml
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é.