Per favore, aggiungi TurboLab.it alle eccezioni del tuo Ad Blocker. Siamo un progetto no-profit, e la pubblicità è indispensabile per pagare le spese.

In alternativa, puoi sostenerci con una donazione.

Rispetteremo ogni tua scelta, e potrai sempre utilizzare il sito senza limitazioni.

Nascondi avviso per 3 giorni

×

Inserisci link ad articolo di TurboLab.it Ricerca articoli

Cerca e inserisci il collegamento a un articolo pubblicato da TurboLab.it

Digita almeno 3 caratteri, poi premi "Invio"

[python notepad++]ricerca ricorsiva

"Null reference exception"? no, grazie, prendo un "unexpected T_VARIABLE"... Questo è il forum per imparare l'arte della programmazione o per chiedere un parere su una sessione di debug particolarmente ostica.
Regole del forum
Ricorda di indicare chiaramente nell'oggetto il linguaggio ([C#] oppure [PHP], [Java], [HTML], ...), se la discussione ne riguarda uno in particolare!
Avatar utente
Trip
Livello: DVD-ROM (5/15)
Livello: DVD-ROM (5/15)
Messaggi: 126
Iscritto il: mar ott 22, 2013 4:16 pm

[python notepad++]ricerca ricorsiva

Messaggio da Trip »

Per favore, aggiungi TurboLab.it alle eccezioni del tuo Ad Blocker. Siamo un progetto no-profit, e la pubblicità è indispensabile per pagare le spese.

In alternativa, puoi sostenerci con una donazione.

Rispetteremo ogni tua scelta, e potrai sempre utilizzare il sito senza limitazioni.

Nascondi avviso per 3 giorni

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()
        
Avatar utente
CUB3
Moderatore
Moderatore
Messaggi: 4966
Iscritto il: lun gen 26, 2015 10:13 am
Has thanked: 87 times
Been thanked: 112 times

Re: [python notepad++]ricerca ricorsiva

Messaggio 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()
        
"Let me tell you a secret: when you hear that the machine is “smart”, what it actually means is that it’s exploitable." Mikko Hypponen
Avatar utente
Trip
Livello: DVD-ROM (5/15)
Livello: DVD-ROM (5/15)
Messaggi: 126
Iscritto il: mar ott 22, 2013 4:16 pm

Re: [python notepad++]ricerca ricorsiva

Messaggio da Trip »

ciao cub3
grazie per il tuo aiuto ma non funziona ugualmente
Avatar utente
CUB3
Moderatore
Moderatore
Messaggi: 4966
Iscritto il: lun gen 26, 2015 10:13 am
Has thanked: 87 times
Been thanked: 112 times

Re: [python notepad++]ricerca ricorsiva

Messaggio 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'):
"Let me tell you a secret: when you hear that the machine is “smart”, what it actually means is that it’s exploitable." Mikko Hypponen
Avatar utente
Trip
Livello: DVD-ROM (5/15)
Livello: DVD-ROM (5/15)
Messaggi: 126
Iscritto il: mar ott 22, 2013 4:16 pm

Re: [python notepad++]ricerca ricorsiva

Messaggio 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++.
Avatar utente
CUB3
Moderatore
Moderatore
Messaggi: 4966
Iscritto il: lun gen 26, 2015 10:13 am
Has thanked: 87 times
Been thanked: 112 times

Re: [python notepad++]ricerca ricorsiva

Messaggio 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()
"Let me tell you a secret: when you hear that the machine is “smart”, what it actually means is that it’s exploitable." Mikko Hypponen
Avatar utente
Trip
Livello: DVD-ROM (5/15)
Livello: DVD-ROM (5/15)
Messaggi: 126
Iscritto il: mar ott 22, 2013 4:16 pm

Re: [python notepad++]ricerca ricorsiva

Messaggio da Trip »

grazie cub3 ,
svelato l'arcano.
ancora grazie 1000
Avatar utente
Trip
Livello: DVD-ROM (5/15)
Livello: DVD-ROM (5/15)
Messaggi: 126
Iscritto il: mar ott 22, 2013 4:16 pm

Re: [python notepad++]ricerca ricorsiva

Messaggio 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 !!
Avatar utente
Trip
Livello: DVD-ROM (5/15)
Livello: DVD-ROM (5/15)
Messaggi: 126
Iscritto il: mar ott 22, 2013 4:16 pm

Re: [python notepad++]ricerca ricorsiva

Messaggio 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.
Avatar utente
CUB3
Moderatore
Moderatore
Messaggi: 4966
Iscritto il: lun gen 26, 2015 10:13 am
Has thanked: 87 times
Been thanked: 112 times

Re: [python notepad++]ricerca ricorsiva

Messaggio 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)
"Let me tell you a secret: when you hear that the machine is “smart”, what it actually means is that it’s exploitable." Mikko Hypponen
Avatar utente
Trip
Livello: DVD-ROM (5/15)
Livello: DVD-ROM (5/15)
Messaggi: 126
Iscritto il: mar ott 22, 2013 4:16 pm

Re: [python notepad++]ricerca ricorsiva

Messaggio 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
Avatar utente
CUB3
Moderatore
Moderatore
Messaggi: 4966
Iscritto il: lun gen 26, 2015 10:13 am
Has thanked: 87 times
Been thanked: 112 times

Re: [python notepad++]ricerca ricorsiva

Messaggio 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()
"Let me tell you a secret: when you hear that the machine is “smart”, what it actually means is that it’s exploitable." Mikko Hypponen
Avatar utente
Trip
Livello: DVD-ROM (5/15)
Livello: DVD-ROM (5/15)
Messaggi: 126
Iscritto il: mar ott 22, 2013 4:16 pm

Re: [python notepad++]ricerca ricorsiva

Messaggio da Trip »

grande cub3
bravissimo !!
grazie 1000.
Mi hai eliminato un mare di lavoro noioso
ciao buona giornata

Per favore, aggiungi TurboLab.it alle eccezioni del tuo Ad Blocker. Siamo un progetto no-profit, e la pubblicità è indispensabile per pagare le spese.

In alternativa, puoi sostenerci con una donazione.

Rispetteremo ogni tua scelta, e potrai sempre utilizzare il sito senza limitazioni.

Nascondi avviso per 3 giorni