Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    Pyren, script di rinomina file multipli per python 2.7

    Ciao, come primo progetto per migliorare le mie abilità con python ho deciso di creare uno script per rinominare gruppi di file. (funzione che manca a nautilus, file manager di default in gnome)

    So che esistono molti script e programmi in grado di fare la stessa cosa.
    Il mio è scritto per essere il più semplice ed immediato possibile. L'ho creato per l'utilizzo da terminale, senza nessuna GUI. E spero di aver raggiunto il mio scopo.

    Sarei felice di avere un vostro parere o un contributo.
    Grazie.

    codice:
    #!/usr/bin/python2.7
    
    """Pyren, rinomina gruppi di file e cartelle.
    Copyright (C) 2012  Marco 'Falk689' Fabbri.
    
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>."""
        
    import os
    
    corr = os.getcwd()
    print ""
    print "======================================================"
    print ""
    print "Pyren. Copyright (C) 2012  Marco 'Falk689' Fabbri"
    print "This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'."
    print "This is free software, and you are welcome to redistribute it"
    print "under certain conditions; type `show c' for details."
    print ""
    print "======================================================"
    print "ATTENZIONE: Usare nomi identici a quelli gia' presenti"
    print "nella cartella di destinazione potrebbe causare"
    print "effetti imprevisti. Sei stato avvisato."
    print "======================================================"
    print ""
    
    def rinomina():   #Funzione finale di rinomina.
       global cartella  
       try:
          num = input("Inserisci il numero del primo file (1): ")
          numero = repr(num)
          if num < 10:
             numero = "000"+numero
          elif num < 100:
             numero = "00"+numero
          elif num < 1000:
             numero = "0"+numero
       except:
          num = 1
          numero = "0001"
       global sfile
       global nomelista
       nome = nomelista+"-"+numero
       print "Rinomina in corso..."
       a = 0
       
       for i in sfile:
          numfile = sfile[a]
          nomefile = cartella[numfile]
          
          if "." in nomefile:   #Verifica se si tratta di un file o di una cartella tramite il formato (es testo.txt)
             u = nomefile.index(".")
             formato = nomefile[u:100]
             nome = nome+formato
             if nome in cartella:
                nome = nomelista+"-"+numero+"-sav"+formato
                
          if nome in cartella:
             nome = nomelista+"-"+numero+"-sav" 
             
          os.rename(cartella[numfile], nome)
          print cartella[num-1]+" > rinominato in: > "+nome 
          
          a = a + 1
          num = num + 1
          numero = repr(num)
          if num < 10:
             numero = "000"+numero
          elif num < 100:
             numero = "00"+numero
          elif num < 1000:
             numero = "0"+numero
          nome = nomelista+"-"+numero
          
       print "Operazione completata."
    
    def lista():   #Definizione e stampa della lista dei file nella cartella
       global cartella
       cartella = os.listdir(corr)
       cartella.sort()
       print "======================================================"
       print "Lista file:"
       global termine
       a = 1
       b = 0
       for x in cartella:
          print a,">>>", cartella[b]
          a, b = a + 1, b + 1
       termine = b
       select()
          
    def select():   #Selezione dei singoli o delle serie di file
       global cartella   
       global sfile
       global nomelista
       sfile = []
       print "======================================================"
       print "Digita un numero corrispondente ad un file da"
       print "rinominare oppure due numeri separati da una"
       print "virgola, per selezionare una serie di file (es 1,10)"
       print "" 
       print "`d' per concludere la selezione,"
       print "`r' per riavviare il programma,"
       print "`exit' per uscire."
       print ""
       
       while True:
          x = raw_input(">>> ")
          if x == "exit":
             print "Uscita in corso..."
             break
             
          elif x == "show w":
             print ""
             print "This program is distributed in the hope that it will be useful,"
             print "but WITHOUT ANY WARRANTY; without even the implied warranty of"
             print "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the"
             print "GNU General Public License for more details."
             print ""
          elif x == "show c":
             print ""
             print "This program is free software: you can redistribute it and/or modify"
             print "it under the terms of the GNU General Public License as published by"
             print "the Free Software Foundation, either version 3 of the License, or"
             print "(at your option) any later version."
             print ""
             
          elif x == "r":
             print "Riavvio..."
             print ""
             print ""
             print ""
             lista()
             break
             
          elif x == "d" and sfile == []:
             print "Seleziona almeno un file."
             
          elif x == "d":
             sfile.sort()
             print "Selezione completata."
             nomelista = raw_input("Digita il nome della lista: ")
             if nomelista == "":             
                nomelista = " "
             print "Il nome e':", nomelista
             print "I file interessati sono:"
             f = 0
             for k in sfile:
                numfile = int(k)
                print cartella[numfile]
                f = f + 1
             procedi()
             break
          else:
             try:
                if x.count(',') == 1 and x[0] != 0 and x.count(' ') == 0:
                   virgola = x.index(',')
                   pstr = x[0:virgola]
                   sstr = x[virgola+1:100]
                   primo = int(pstr) - 1
                   secondo = int(sstr)
                   if secondo <= termine:
                      j = range(primo,secondo)
                      for n in j:
                         sfile.append(n)
                   else:
                      print "File non disponibile"
                      
                else:                                                                                   
                   j = int(x)
                   d = j - 1 
                   if d in sfile:
                      print "File gia' selezionato"
                   elif j > termine or j == 0:
                      print "File non disponibile."
                   elif j != 0:
                      j = j - 1
                      sfile.append(j)
             except:
                print "Inserisci un numero o un comando valido"
                
    def procedi():   #Semplice funzione di conferma in grado di riavviare o uscire dal programma
       domanda = raw_input("Procedi? `s', `n', `exit': ")
       if domanda == "s":
          rinomina()
       elif domanda == "exit":
          print "Uscita in corso..."
          return     
       elif domanda == "n":
          lista()
       else:
          print "Rispondi `s',`n' o `exit'"
          procedi()
          
    lista()

  2. #2
    I sorgenti più aggiornati li trovate qui:
    http://falk83.altervista.org/python/pyren.py

    Siccome è preferibile usare le classi piuttosto che le variabili globali l'ho aggiornato alla svelta.
    Spero sia utile a qualcuno fra le altre cose.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.