2011-05-15 6 views
1

Possible en double:
Rename Files in PythonRemplacer les noms de fichiers en python avec de nouveaux noms de fichiers

Salut à tous, je suis en train de créer un script en Python pour envelopper un certain nombre de commandes OS liées à l'édition d'images en vrac , et la plupart des tâches sont terminées, mais je suis perplexe sur une tâche (apparemment simple).

Quand je numériser des images sur mon scanner, je reçois un nom de fichier semblable à ceci:

201105151110_0001A.jpg

où la première partie est une sorte d'horodatage (que je veux remplacer), mais Je voulais en faire une variable d'entrée (où moi, ou d'autres utilisateurs, je pourrais simplement coller ça dans la ligne de commande, si j'utilise un autre scanner où la structure du nom de fichier pourrait être différente.) 0001A signifie le recto de la première photo/document , et je voudrais garder cette partie du nom de fichier

J'ai trois variables mis en place:

old_prefix = input(bcolors.PROMPT + "Enter the prefix to replace: " + bcolors.ENDC) 
    new_prefix = input(bcolors.PROMPT + "Enter the new prefix: " + bcolors.ENDC) 
    working_directory 

répertoire_travail est la variable d'une autre partie du code, où se trouvent les images. La partie couleur est juste pour que je puisse coloriser la sortie et la rendre plus facile à lire. Il y aurait de 1-1000 fichiers dans le répertoire lorsque je travaille dessus.

Ce script sera exécuté sous Linux.

Merci!

--- EDIT ---

Désolé pour perdre votre temps les gars, il semble que je négligé certaines informations dans la question liée ici par Kiril Kirov, le code que je suis venu avec, ce qui fonctionne est:

elif retouch_option == "06": 
    print(" ") 
    old_prefix = input(bcolors.PROMPT + "Enter the prefix to replace: " + bcolors.ENDC) 
    new_prefix = input(bcolors.PROMPT + "Enter the new prefix.......: " + bcolors.ENDC) 
    print(bcolors.OUTPUT + " ") 
    for fname in glob(working_directory + "*.jpg"): 
     keeper = fname[-9:] 
     print("Renaming image", keeper) 
     os.rename(fname, fname.replace(old_prefix, new_prefix)) 

Je pense que cela devrait être sûr, car il ne fait que remplacer la variable old_prefix par la variable new_prefix. Est-ce vrai? Si ce n'est pas le cas, j'apprécierais certainement les commentaires, même si cela semble fonctionner jusqu'à présent.

+0

si vous voulez le diviser comme 1_ $ 2.jpg $ et que vous voulez garder 2 $ et remplacer 1 $? Que restes-tu en train de lire l'entrée ou de passer à l'étape suivante? – matchew

+0

'pour fn dans * .jpg; fais mv -n $ fn $ (echo $ fn | sed 's /.*_//'); done' –

+0

J'ai ajouté des informations à mon message initial, et jusqu'à présent, il semble être sûr, bien que je sois assez nouveau à Python, donc je ne suis pas sûr de pouvoir m'échapper de quelque chose en l'utilisant (c'est-à-dire le motif correspond), mais puisque c'est juste en remplaçant une variable par une autre, cela devrait fonctionner correctement? –

Répondre

2

quelque chose comme:

sep = '_' 
try: 
    prefix,keeper = filename.split(sep) 
except: # filename does not match desired structure 
    print "not processed: no '" + sep + "' in '"+ filename + "'" 
else: # split succeeded: 
    if prefix == old_prefix: 
     filename = new_prefix + sep + keeper 
     # more processing... 
    else: 
     print "prefix doesn't match in '" + filename + "'" 
+1

si vous utilisez 'prefix, sep, rest = filename.partition ('_') 'then' si prefix == old_prefix: filename = new_prefix + sep + reste' fonctionnera même si 'filename 'ne contient pas'' _''. – jfs

+0

"partition" est seulement python 2.5 et plus tard. question n'a pas précisé la version de python, donc je suis allé avec quelque chose de basique. En outre, vous ne voulez probablement pas * que cela fonctionne si le nom de fichier est, par exemple, '..' – fyngyrz

Questions connexes