Pagina 1 di 1

[python notepad++]ricerca ricorsiva

Inviato: dom lug 11, 2021 5:24 pm
da Trip
salve a rutti,
Ho un problema con il codice in python per notepad++.
Devo far ricercare e sostituire delle stringhe i una directory e nelle sue sottodirectory in modo ricorsivo.
Ho pensato all'uso di os.walk()
Il problema e che non sostituisce niente.
Qualche anima pia che mi può aiutare?grazie

Codice: Seleziona tutto

import os;
import sys;
for root, dirs, files in os.walk('C:\Users\xxx\Desktop\cartella'):
    for file in files:        
        editor.replace("old","news")
        notepad.save()
        notepad.close()
        

Re: [python notepad++]ricerca ricorsiva

Inviato: lun lug 12, 2021 11:21 am
da CUB3
Ciao Trip!
Leggendo la documentazione, probabilmente devi aprire il file con notepad.open(file) prima di poterlo editare; prova a modificare il tuo script così:

Codice: Seleziona tutto

import os;
import sys;
for root, dirs, files in os.walk('C:\Users\xxx\Desktop\cartella'):
    for file in files:  
        notepad.open(file)      
        editor.replace("old","news")
        notepad.save()
        notepad.close()
        

Re: [python notepad++]ricerca ricorsiva

Inviato: lun lug 12, 2021 9:51 pm
da Trip
ciao cub3
grazie per il tuo aiuto ma non funziona ugualmente

Re: [python notepad++]ricerca ricorsiva

Inviato: mar lug 13, 2021 8:42 am
da CUB3
Ho fatto qualche prova e un problema è sicuramente la definizione del path che va espresso con il doppio, anziché singolo, slash //.

Prova a modificare questa riga, così:

Codice: Seleziona tutto

for root, dirs, files in os.walk('C:\\Users\\xxx\\Desktop\\cartella'):

Re: [python notepad++]ricerca ricorsiva

Inviato: mar lug 13, 2021 9:22 am
da Trip
ciao cub3,
ho provato con la sintassi da te indicata.
Mi appare un pop-out che mi chiede di creare un nuovo file con lo stesso nome del file presente in "cartella" ( che nello script non viene menzionato,) in c:\propgramfile\notepad++.

Re: [python notepad++]ricerca ricorsiva

Inviato: mar lug 13, 2021 10:33 am
da CUB3
OK, questo problema è dato dal fatto che lo script è eseguito dalla cartella c:\propgramfile\notepad++ ma il file si trova in C:\Users\xxx\Desktop\cartella; poiché il ciclo for file in files restituisce solo il nome del file e non il percorso completo, ecco che ti viene chiesto di creare un nuovo file con il nome di quello trovato nella cartella di ricerca.

Dovresti riuscire a risolvere utilizzando un altra funzione del modulo os, os.path.abspath(), modificando così lo scritp:

Codice: Seleziona tutto

import os;
import sys;
for root, dirs, files in os.walk('C:\Users\xxx\Desktop\cartella'):
    for file in files:  
        notepad.open(os.path.abspath(file))      
        editor.replace("old","news")
        notepad.save()
        notepad.close()

Re: [python notepad++]ricerca ricorsiva

Inviato: mar lug 13, 2021 11:11 am
da Trip
grazie cub3 ,
svelato l'arcano.
ancora grazie 1000

Re: [python notepad++]ricerca ricorsiva

Inviato: mar lug 13, 2021 1:22 pm
da Trip
Trip ha scritto: mar lug 13, 2021 11:11 am grazie cub3 ,
svelato l'arcano.
ancora grazie 1000
retifico quanto detto sopra!
Non mi appare più alcuna finestra ma in compenso non mi apporta nessuna modigica ai file :-(
E' una maledizione !!

Re: [python notepad++]ricerca ricorsiva

Inviato: mar lug 13, 2021 2:25 pm
da Trip
...la cosa "bella" è che se modifico lo script in

Codice: Seleziona tutto

import os;
import sys;
for root, dirs, files in os.walk('C:\Users\\jack\\Desktop\\cartella'):
    for file in files:  
        print(os.path.abspath(file)) 
        
ottengo come output

Codice: Seleziona tutto

C:\Program Files\Notepad++\f1.txt
C:\Program Files\Notepad++\f2.txt
C:\Program Files\Notepad++\b1.txt
C:\Program Files\Notepad++\f1.txt
ove i file f1f2, b1 è b2.txt sono i miei file , ma non esistono in quel percorso.

Re: [python notepad++]ricerca ricorsiva

Inviato: mar lug 13, 2021 4:10 pm
da CUB3
:acch Abbi pazienza, non ho modo di provare il tuo script completo, ma vediamo se, a forza di tentativi riusciamo ad arrivare in fondo :)

Proviamo ad aggirare il problema del path relativo, utilizzando questo codice alla riga corrispondente:

Codice: Seleziona tutto

 notepad.open(‘C:\\Users\\xxx\\Desktop\\cartella\\’+file)

Re: [python notepad++]ricerca ricorsiva

Inviato: mar lug 13, 2021 8:46 pm
da Trip
ciao cub3,
non preoccuparti nessun problema...
Sei il mio mentore ... tu mi dici cosa devo fare e io lo faccio...
ops mi sembra di averla già sentita questa battuta!
torniamo a noi... lo script è praticamente quello che ho postato per primo, se non per il fatto che è "farcito" di una serie di "editor.replace() per sostituire più vocaboli in modo ricorsivo in più file del tipo tmx.
Con l'ultima modifica del listato qualcosa si è mosso: avviene la sostituzione richiesta, però ,( purtroppo c'è ancora un però ! ) mi appare una finestra di richiesta , simile a quella precedente, che mi avverte che i file b1.txt e b2.txt presenti nella sua sottocartella b non sono presenti e mi chiede di poterli creare nella cartella "cartella" ( quella del percorso indicato nello sketch).
Tieni presente che nella directory cartella ho questa situazione:

cartella
| | f1.txt
| | f2.txt
|
|b
|
| b1.txt
| b2.txt

Re: [python notepad++]ricerca ricorsiva

Inviato: mer lug 14, 2021 8:53 am
da CUB3
Trip ha scritto: mar lug 13, 2021 8:46 pm Tieni presente che nella directory cartella ho questa situazione:
cartella
| | f1.txt
| | f2.txt
|
|b
|
| b1.txt
| b2.txt
Dimenticavo... :muro

Vediamo se riusciamo ad arrivare in fondo... Possiamo utilizzare la variabile root del primo ciclo for per specificare il percorso completo al file; quindi il codice diventa:

Codice: Seleziona tutto

import os;
import sys;
for root, dirs, files in os.walk('C:\Users\xxx\Desktop\cartella'):
    for file in files:  
        notepad.open(root+'\\'+file)      
        editor.replace("old","news")
        notepad.save()
        notepad.close()

Re: [python notepad++]ricerca ricorsiva

Inviato: mer lug 14, 2021 9:04 am
da Trip
grande cub3
bravissimo !!
grazie 1000.
Mi hai eliminato un mare di lavoro noioso
ciao buona giornata