[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!
Rispondi
Avatar utente
Trip
Livello: CD-ROM (4/15)
Livello: CD-ROM (4/15)
Messaggi: 80
Iscritto il: mar ott 22, 2013 4:16 pm

[python notepad++]ricerca ricorsiva

Messaggio 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()
        

System
System
Bot ufficiale TurboLab.it
Bot
Messaggi:
Iscritto il: sab dic 31, 2016 6:19 pm
Contatta: Contatta

Re: [python notepad++]ricerca ricorsiva

Messaggio da System » dom lug 11, 2021 5:24 pm


Avatar utente
CUB3
Moderatore
Moderatore
Messaggi: 2372
Iscritto il: lun gen 26, 2015 10:13 am

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: CD-ROM (4/15)
Livello: CD-ROM (4/15)
Messaggi: 80
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: 2372
Iscritto il: lun gen 26, 2015 10:13 am

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: CD-ROM (4/15)
Livello: CD-ROM (4/15)
Messaggi: 80
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: 2372
Iscritto il: lun gen 26, 2015 10:13 am

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: CD-ROM (4/15)
Livello: CD-ROM (4/15)
Messaggi: 80
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: CD-ROM (4/15)
Livello: CD-ROM (4/15)
Messaggi: 80
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: CD-ROM (4/15)
Livello: CD-ROM (4/15)
Messaggi: 80
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: 2372
Iscritto il: lun gen 26, 2015 10:13 am

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: CD-ROM (4/15)
Livello: CD-ROM (4/15)
Messaggi: 80
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: 2372
Iscritto il: lun gen 26, 2015 10:13 am

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: CD-ROM (4/15)
Livello: CD-ROM (4/15)
Messaggi: 80
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

System
System
Bot ufficiale TurboLab.it
Bot
Messaggi:
Iscritto il: sab dic 31, 2016 6:19 pm
Contatta: Contatta

Re: Re: [python notepad++]ricerca ricorsiva

Messaggio da System » mer lug 14, 2021 9:04 am


Rispondi
  • Argomenti simili
    Risposte
    Visite
    Ultimo messaggio