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