IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

python notepad++ search replace multi fichiers


Sujet :

Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mai 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2018
    Messages : 12
    Points : 5
    Points
    5
    Par défaut python notepad++ search replace multi fichiers
    bonjour
    j'ai trouve ce script python pour notepad++ pour chercher et remplacer plusieurs occurences via un fichier text contenant sur deux colonnes une valeur a chercher et la valeur de remplacement
    il à l'air de fonctionner mais pour un fichier ouvert ds notepad++
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    with open('C://test/modifier.txt') as f:
        for l in f:
            s = l.split()
            editor.replace(s[0], s[1])
    comment faire pour faire la même chose avec notepad++ dans tous mes directories et html files? et bien sur sauver les fichiers (je ne connais pas du tout python)
    merci pour votre aide

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par gigi44000 Voir le message
    comment faire pour faire la même chose avec notepad++ dans tous mes directories et html files? et bien sur sauver les fichiers (je ne connais pas du tout python)
    Si vous ne connaissez pas du tout Python, ouvrez un tuto. pour apprendre les bases, regardez dans la FAQ quelles sont les fonctions utiles côté fichiers, ...

    Modifier les données de votre disque dur est une opération dangereuse: si on se trompe, on perdra sans doute des données... Et vous n'allez pas récupérer n'importe quel code sur Internet sans avoir compris ce qu'il fait avant de taper "run" et pleurer.

    Et on ne va pas vous donner quelque chose qui pourrait vous blesser sans s'être assuré que vous êtes capable de vous en servir (savoir un peu programmer).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Pourquoi tu veux faire ça avec Python alors que notepad++ peut déjà le faire tout seul?
    Suffit d'ouvrir "rechercher et remplacer" et cliquer sur le bouton "remplacer dans tous les documents ouverts"...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Invité
    Invité(e)
    Par défaut
    Ctrl + H
    Nom : screenshot.png
Affichages : 120
Taille : 51,8 Ko

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mai 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2018
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    bonjour,
    merci pour vos reponses

    pourquoi python? je souhaite remplacer plusieurs valeurs differentes en meme temps
    j'ai dans mes fichiers html des occurences de ce type [40.808,9.954] il y a trois chiffres après le point je souhaite qu'il n'y en ai plus que deux
    avec notepad en utilisant les expressions regulieres je sais faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    recherche = (?<=\d\.\d{2})\d+
    remplacer = vide
    mode de recherche = expression reguliere
    mais je voudrais pouvoir arrondir ces trois chiffres avant de supprimer le dernier

    exemple
    [40.808,9.954] devient [40.81,9.95] ici 08, devient 1, et 54] devient 5]
    [142.800,89.566] devient [142.80,89.57] ici 00, devient 0, et 66] devient 7]

    sur une page html ouverte dans notepad++ en deux temps
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    with open('C://test/modifier.txt') as f:
        for l in f:
            s = l.split()
            editor.replace(s[0], s[1])
    avec le fichier modifier.txt de ce style

    09, 10,
    09] 10]
    19, 20,
    19] 20]
    29, 30,
    etc etc etc

    puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    recherche = (?<=\d\.\d{2})\d+
    remplacer = vide
    mode de recherche = expression reguliere
    semble le faire, mais je ne sais pas modifier ce code python pour qu'il aille remplacer dans mes fichiers html non ouverts dans notepad++
    je pense que pour quelqu'un pratiquant python avec un loop et en sachant l'associer à notepad ca doit etre facile
    en vous remerciant

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par gigi44000 Voir le message
    je pense que pour quelqu'un pratiquant python avec un loop et en sachant l'associer à notepad ca doit etre facile
    Absolument! Mais on ne va pas le coder à votre place.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Invité
    Invité(e)
    Par défaut
    Salut !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> import re
    >>> text = '[erret1.5]o1.289u5'
    >>> [f'{round(float(nb),2):.2f}' for nb in re.findall(r'[\d\.\d]+', text)]
    ['1.50', '1.29', '5.00']
    J'ai essayé de le faire sans regex c'est pô facile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    def find(text):
    	i = 0
    	results = []
    	nb = ''
    	while i != len(text):
    		if text[i].isdigit() or text[i] == '.':
    			nb+=text[i]
    		elif nb:
    			results.append(f'{round( float(nb), 2):.2f}')
    			nb = ''
    		i+=1
    	if nb:
    		results.append(f'{round( float(nb), 2):.2f}')
    	print(results)
    Et ça ne couvre pas tous les nombres loin de là ! Exemple de nombre non pris en compte : 12E+06

    Petit test de performance :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    >>> def test():
    	text = '15.2[erret1.5çiuouip5'
    	print('####################PYTHON##################')
    	st = time.time()
    	x = [find(text) for _ in range(1000000)]
    	print(time.time()-st)
    	print('####################REGEX##################')
    	st = time.time()
    	x = [regex(text) for _ in range(1000000)]
    	print(time.time()-st)
     
     
    >>> test()
    ####################PYTHON##################
    6.329169511795044
    ####################REGEX##################
    4.794497489929199
    Pas trop mal ma fonction...

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par LeNarvalo Voir le message
    J'ai essayé de le faire sans regex c'est pô facile
    Appliquer float à la chaine de caractère encapsulé dans un try...except devrait fonctionner.
    Et pour faire ça avec des expressions régulières, non c'est pas facile et un peu de recherche sur Internet devrait sortir quelques solutions (et montrer les difficultés à résoudre/maîtriser).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Invité
    Invité(e)
    Par défaut
    Oui j'ai essayé une fonction avec try except et float(...) mais j'ai lâché l'affaire à mon 42 ème cas particuliers problématiques. ^^'

  10. #10
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    Citation Envoyé par LeNarvalo Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    while i != len(text):
        if text[i].isdigit() or text[i] == '.':
    Pourquoi ne pas itérer sur text afin d'en récupérer chaque caractère sans passer par les indices ?
    Au pire avec les indices, il y a enumerate
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  11. #11
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Pourquoi ne pas itérer sur text afin d'en récupérer chaque caractère sans passer par les indices ?
    Au pire avec les indices, il y a enumerate
    Oui pas faux ! J'étais parti sur autre chose au début.

  12. #12
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par LeNarvalo Voir le message
    Oui j'ai essayé une fonction avec try except et float(...) mais j'ai lâché l'affaire à mon 42 ème cas particuliers problématiques. ^^'
    C'est la raison pour laquelle il y a des séparateurs entre les entités: si on ne sait pas où ça commence ni où ça finit...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mai 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2018
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    un grand merci lenarvallo, c'est super gentil
    je regarde tout ca plus precisement demain

  14. #14
    Invité
    Invité(e)
    Par défaut
    Je n'ai pas trop compris ta réponse Wiz... Mais c'est vite le bazard :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    def func(text):
     
    	i0, i1 = 0, 1
    	n = len(text)
    	n1 = n+1
    	results = []
     
    	while i0 != n:
    		try:
    			while i1 != n1 :
    				if text[i1-1].lower() == "e":
    					i1+=1
    					if text[i1-1] == "+" or text[i1-1] == "-":
    						i1+=2
    				nb = float(text[i0:i1])
    				i1 += 1
     
    			if 'nb' in locals(): #Au cas où la fin du text est un nombre...
    				results.append(f'{round( float(nb), 2 ):.2f}')
    				break #On sort de la boucle principale
     
    		except: #Un caractère ne correspond pas à un nombre
    			if 'nb' in locals(): #Si un nombre a été capturé avant l'exception, on le rajoute à la liste,
    				results.append(f'{round( float(nb), 2 ):.2f}')
    				i0 = i1 #et on avance la recherche à i1.
    				del(nb)
     
    			else: #Sinon on avance simplement d'un caractère.
    				i0 += 1
    			i1 += 1
     
    	return results
    (Petite fantaisie avec le 'nb' in locals(), histoire de ne pas déclarer la variable nb avant les boucles. Pas performant, je sais, mais j'utilise jamais del() sinon ! ^^)

    Ah oui j'oubliais, un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    func('p15.269[erret1.523çiuouip1.491E+02p')
    ['15.27', '1.52', '149.10']
    De rien @gigi44000 , j'ai pas pu résister à ce petit exercice... Après il faudrait que tu comprennes ce que j'ai pondu et ça ce n'est pas facile !

  15. #15
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par LeNarvalo Voir le message
    Je n'ai pas trop compris ta réponse Wiz...
    Et moi je ne comprends pas trop dans quelle galère vous allez...
    Pour l'instant, la seule information que le PO ait donné est:

    je souhaite remplacer plusieurs valeurs differentes en meme temps
    j'ai dans mes fichiers html des occurences de ce type [40.808,9.954] il y a trois chiffres après le point je souhaite qu'il n'y en ai plus que deux
    On a donc un pattern '['*','*']' ou les * doivent être des nombres flottants.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  16. #16
    Invité
    Invité(e)
    Par défaut
    J'aime le défi !
    A vrai dire, je souhaitais faire la même chose que re.findall(...) car je pressens que le PO n'est pas exhaustif...
    S'il passait par là et pouvait nous donner un extrait de ses fichiers html.

    Sinon effectivement c'est beaucoup plus facile avec le format qu'il présente :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [f'{round(float(nb),2):.2f}' for nb in text[1:text.index(']')].split(',')]
    #text.index(']') ou -1
    Dernière modification par Invité ; 12/06/2022 à 22h47.

  17. #17
    Futur Membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mai 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2018
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    bonjour à tous
    encore merci de vous penchez sur le probleme surtout à toi lenarvalo
    j'ai ces chaines de latitude longitude [-17.219,28.104] dans un fichier js et dans mes pages html et mon but est d'oter du poids à mon js, mais pour cela il faut que je traite aussi de la meme maniere leur correspondance dans les pages html
    quand dans le js c'est [-17.219,28.104] dans la page html correspondante c'est l'inverse [28.104,-17.219]
    voici comment sont mes pages : poeme silbo gomero
    j'ai dejà tout appris sur le tas pour faire mon site et pour l'instant je ne comprend meme pas comment me servir de ce que tu as fait avec notepad++

    le probleme va peut-etre etre aussi si sur mes pages j'ai deux chiffres suivis d'une virgule qui sont autres que ceux que je vise qui sont entre des crochets et qu'il ne faudrait pas changer
    peut erte que le plus simple va etre de le faire à la maniere bourrin en repetant les recherche remplacements av notepad ce qui me permettrait de connaitre le nombre de remplacements histoire de pouvoir verifier

  18. #18
    Invité
    Invité(e)
    Par défaut
    Ben je ne sais pas trop quoi te dire, à toi de voir, je veux bien essayer de te donner des outils à modifier à ta sauce mais pour le reste va falloir que tu raisonnes par toi-même et probablement que tu ouvres des tutos python si c'est la voie que tu veux prendre.

  19. #19
    Futur Membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mai 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2018
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    oui merci lenarvalo
    de toutes façons il va falloir que je m'y mette et decortiquer ce que tu as fait va etre très interessant pour moi

Discussions similaires

  1. [Search/Replace] Eclipse fichier xml
    Par GyZmoO dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 09/01/2009, 19h57
  2. [EDI] Outil search/replace (ds code php - fichier texte)
    Par vandeyy dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 09/02/2007, 11h30
  3. [phpMyAdmin] L'export multi-fichiers est-il possible ?
    Par Christophe Charron dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 19/10/2006, 00h04
  4. comment utiliser Notepad pour modifier un fichier texte?
    Par moon13_698 dans le forum Autres Logiciels
    Réponses: 7
    Dernier message: 06/05/2006, 15h41
  5. Search/Replace, avez vous plus rapide ?
    Par Bruno13 dans le forum Langage
    Réponses: 7
    Dernier message: 30/01/2006, 15h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo