|
|
|
|
||||||
![]() |
|
|
LinkBack | Outils de la discussion |
|
|
#1 |
|
Messages: n/a
Hébergeur: |
Bonjour,
Je souhaite renommer des fichiers à partir d'une liste de nouveaux noms contenus dans un objet liste... Voici un code minimal qui ne fonctionne pas : *** #!/usr/bin/python #-*- coding: utf-8 -*- from os import listdir, getcwd, rename import re list_names=['new_name1','new_name2'] list_files = listdir(getcwd()) #only JPG's ! filtre = re.compile("jpg$", re.IGNORECASE) list_jpg = filter(filtre.search, list_files) #strip all elements of list list_jpg list_jpg_strip=[] for nom in list_jpg: #print nom.strip() list_jpg_strip.append(nom.strip()) #let's rename : i=0 while i <= len(list_jpg_strip): rename(list_jpg_strip[i],list_names[i]) i=i+1 **** Le message d'erreur est : File "ecm.py", line 17, in <module> rename(list_jpg_strip[i],list_names[i]) OSError: [Errno 2] No such file or directory Mais pourtant tout existe bien dans le repertoire où je lance ce script. Bloody hell ! :-s Une idée ? Merci. Rémi. PS : crossposté sur clp, suivi sur fclp |
|
|
|
#2 |
|
Messages: n/a
Hébergeur: |
rémi a écrit :
> Bonjour, > > Je souhaite renommer des fichiers à partir d'une liste de nouveaux noms > contenus dans un objet liste... > Voici un code minimal qui ne fonctionne pas : > *** > #!/usr/bin/python > #-*- coding: utf-8 -*- > from os import listdir, getcwd, rename > import re > list_names=['new_name1','new_name2'] > list_files = listdir(getcwd()) > #only JPG's ! > filtre = re.compile("jpg$", re.IGNORECASE) > list_jpg = filter(filtre.search, list_files) > #strip all elements of list list_jpg > list_jpg_strip=[] > for nom in list_jpg: > #print nom.strip() > list_jpg_strip.append(nom.strip()) > #let's rename : > i=0 > while i <= len(list_jpg_strip): > rename(list_jpg_strip[i],list_names[i]) > i=i+1 > **** > Le message d'erreur est : > File "ecm.py", line 17, in <module> > rename(list_jpg_strip[i],list_names[i]) > OSError: [Errno 2] No such file or directory > Mais pourtant tout existe bien dans le repertoire où je lance ce script. > Bloody hell ! :-s > Une idée ? > Merci. > Rémi. > > PS : crossposté sur clp, suivi sur fclp A quoi te sert la fonction strip ? A mon avis il n'y a pas d'espace avant ou apres le nom des fichiers. Qu'est-ce que ca donne si tu fais afficher les deux noms de fichiers parametres de ton rename ? Est-ce que ca plante a la premiere iteration, seconde ou plus... |
|
|
|
#3 |
|
Messages: n/a
Hébergeur: |
rémi a écrit :
> Bonjour, > > Je souhaite renommer des fichiers à partir d'une liste de nouveaux noms > contenus dans un objet liste... > Voici un code minimal qui ne fonctionne pas : > *** > #!/usr/bin/python > #-*- coding: utf-8 -*- > from os import listdir, getcwd, rename > import re > list_names=['new_name1','new_name2'] > list_files = listdir(getcwd()) > #only JPG's ! > filtre = re.compile("jpg$", re.IGNORECASE) > list_jpg = filter(filtre.search, list_files) > #strip all elements of list list_jpg > list_jpg_strip=[] > for nom in list_jpg: > #print nom.strip() > list_jpg_strip.append(nom.strip()) > #let's rename : > i=0 > while i <= len(list_jpg_strip): > rename(list_jpg_strip[i],list_names[i]) > i=i+1 > **** > Le message d'erreur est : > File "ecm.py", line 17, in <module> > rename(list_jpg_strip[i],list_names[i]) > OSError: [Errno 2] No such file or directory > Mais pourtant tout existe bien dans le repertoire où je lance ce script. > Bloody hell ! :-s > Une idée ? > Merci. > Rémi. > > PS : crossposté sur clp, suivi sur fclp A quoi te sert la fonction strip ? A mon avis il n'y a pas d'espace avant ou apres le nom des fichiers. Qu'est-ce que ca donne si tu fais afficher les deux noms de fichiers parametres de ton rename ? Est-ce que ca plante a la premiere iteration, seconde ou plus... |
|
|
|
#4 |
|
Messages: n/a
Hébergeur: |
Bonjour !
En fait, ton script fonctionne. Remplace seulement : while i <= len par while i < len pour éviter de chercher un fichier de trop. Attention : on ne peut lancer le script qu'une fois (car les nouveau noms n'ont plus l'extension .jpg) -- @-salutations Michel Claveau |
|
|
|
#5 |
|
Messages: n/a
Hébergeur: |
Bonjour !
En fait, ton script fonctionne. Remplace seulement : while i <= len par while i < len pour éviter de chercher un fichier de trop. Attention : on ne peut lancer le script qu'une fois (car les nouveau noms n'ont plus l'extension .jpg) -- @-salutations Michel Claveau |
|
|
|
#6 |
|
Messages: n/a
Hébergeur: |
Le Sat, 15 Sep 2007 05:00:40 +0200, MC a écrit:
> Bonjour ! > > En fait, ton script fonctionne. > Remplace seulement : > while i <= len > par > while i < len > > pour éviter de chercher un fichier de trop. oui en effet, c'est ce qui n'allait pas ! De plus, j'avais mis une espace d'un fichier test.jpg Pour éviter cela peut-être qu'il est inutile d'utiliser un strip() sur listdir(getcwd()) Merci. Rémi. |
|
|
|
#7 |
|
Messages: n/a
Hébergeur: |
Le Sat, 15 Sep 2007 05:00:40 +0200, MC a écrit:
> Bonjour ! > > En fait, ton script fonctionne. > Remplace seulement : > while i <= len > par > while i < len > > pour éviter de chercher un fichier de trop. oui en effet, c'est ce qui n'allait pas ! De plus, j'avais mis une espace d'un fichier test.jpg Pour éviter cela peut-être qu'il est inutile d'utiliser un strip() sur listdir(getcwd()) Merci. Rémi. |
|
|
|
#8 |
|
Messages: n/a
Hébergeur: |
Le Fri, 14 Sep 2007 22:35:00 +0200, alain a écrit:
[...] > A quoi te sert la fonction strip ? > A mon avis il n'y a pas d'espace avant ou apres le nom des fichiers. Oui mais une fausse manip m'en a fait rajouter un (sur un fichier jpg) :-s J'ai utilisé la fonction strip car la liste des nouveaux noms de fichiers (contnue dans un fichier texte) est : ['tata\n', 'tete\n'] C'est pour éliminer les '\n' > Qu'est-ce que ca donne si tu fais afficher les deux noms de fichiers > parametres de ton rename ? En fait ça marchait sauf que les fichier cherché s'appelait "1.jpg" et que le fichier présent était "1.jpg " (espace après jpg). Merci. Rémi. |
|
|
|
#9 |
|
Messages: n/a
Hébergeur: |
Le Fri, 14 Sep 2007 22:35:00 +0200, alain a écrit:
[...] > A quoi te sert la fonction strip ? > A mon avis il n'y a pas d'espace avant ou apres le nom des fichiers. Oui mais une fausse manip m'en a fait rajouter un (sur un fichier jpg) :-s J'ai utilisé la fonction strip car la liste des nouveaux noms de fichiers (contnue dans un fichier texte) est : ['tata\n', 'tete\n'] C'est pour éliminer les '\n' > Qu'est-ce que ca donne si tu fais afficher les deux noms de fichiers > parametres de ton rename ? En fait ça marchait sauf que les fichier cherché s'appelait "1.jpg" et que le fichier présent était "1.jpg " (espace après jpg). Merci. Rémi. |
|
|
|
#10 |
|
Messages: n/a
Hébergeur: |
Bonjour,
================== i=0 while i <= len(list_jpg_strip): rename(list_jpg_strip[i],list_names[i]) i=i+1 ================== En "bon" Python on fait rarement ce genre de boucle avec un indice. Au lieu de i=0 while i < len(liste): fais_qqch_avec(liste[i]) i = i+1 on écrit : for element in liste: fais_qqch_avec(element) On économise 2 lignes, et c'est plus lisible Quand on veut travailler sur plusieurs listes en parallèle : for elt1,elt2 in zip(liste1,liste2): fais_qqch_avec(elt1,elt2) Dans ton exemple ça donnerait : for ancien,nouveau in zip(list_jpg_strip,list_names): rename(ancien,nouveau) A+ Pierre |
|
|
|
#11 |
|
Messages: n/a
Hébergeur: |
Bonjour,
================== i=0 while i <= len(list_jpg_strip): rename(list_jpg_strip[i],list_names[i]) i=i+1 ================== En "bon" Python on fait rarement ce genre de boucle avec un indice. Au lieu de i=0 while i < len(liste): fais_qqch_avec(liste[i]) i = i+1 on écrit : for element in liste: fais_qqch_avec(element) On économise 2 lignes, et c'est plus lisible Quand on veut travailler sur plusieurs listes en parallèle : for elt1,elt2 in zip(liste1,liste2): fais_qqch_avec(elt1,elt2) Dans ton exemple ça donnerait : for ancien,nouveau in zip(list_jpg_strip,list_names): rename(ancien,nouveau) A+ Pierre |
|
|
|
#12 |
|
Messages: n/a
Hébergeur: |
Le Sun, 16 Sep 2007 00:40:39 -0700, Pierre Quentel a écrit:
> Bonjour, > > ================== > i=0 > while i <= len(list_jpg_strip): > rename(list_jpg_strip[i],list_names[i]) > i=i+1 > ================== > > En "bon" Python on fait rarement ce genre de boucle avec un indice. [...] Merci beaucoup pour cette remarque et le code qui suit ! :-) Je me doutais que ce n'était pas très orthodoxe. @+ Rémi. |
|
|
|
#13 |
|
Messages: n/a
Hébergeur: |
Le Sun, 16 Sep 2007 00:40:39 -0700, Pierre Quentel a écrit:
> Bonjour, > > ================== > i=0 > while i <= len(list_jpg_strip): > rename(list_jpg_strip[i],list_names[i]) > i=i+1 > ================== > > En "bon" Python on fait rarement ce genre de boucle avec un indice. [...] Merci beaucoup pour cette remarque et le code qui suit ! :-) Je me doutais que ce n'était pas très orthodoxe. @+ Rémi. |
|
|
|
#14 |
|
Messages: n/a
Hébergeur: |
rémi a écrit :
> Le Sat, 15 Sep 2007 05:00:40 +0200, MC a écrit: > >> Bonjour ! >> >> En fait, ton script fonctionne. >> Remplace seulement : >> while i <= len >> par >> while i < len >> >> pour éviter de chercher un fichier de trop. > > oui en effet, c'est ce qui n'allait pas ! > De plus, j'avais mis une espace d'un fichier test.jpg > Pour éviter cela peut-être qu'il est inutile d'utiliser un strip() sur > listdir(getcwd()) Un réflexe que j'essaie d'adopter autant que possible, surtout en cas de debug, consiste à inclure l'instruction qui plante dans un try/except: try: rename(list_jpg_strip[i],list_names[i]) except OSError: print 'list_jpg_strip[i] =', list_jpg_strip[i], 'list_names[i] =', list_names[i] Et là tu aurais compris par toi-même l'erreur ;o) D'ailleurs dans le cas de manipulation de fichiers, je crois qu'il est mieux de toujours effectuer les opérations dans un try/except, car rien ne te garantit que le fichier est présent, accessible en lecture et/ou écriture, etc.... Voir également sys.exc_info() si tu veux gérer l'information concernant l'exception qui s'est produite pour la retourner à l'utilisateur, ou effectuer un traitement circonstancié. > Merci. 2 rien ... > Rémi. |
|
|
|
#15 |
|
Messages: n/a
Hébergeur: |
rémi a écrit :
> Le Sat, 15 Sep 2007 05:00:40 +0200, MC a écrit: > >> Bonjour ! >> >> En fait, ton script fonctionne. >> Remplace seulement : >> while i <= len >> par >> while i < len >> >> pour éviter de chercher un fichier de trop. > > oui en effet, c'est ce qui n'allait pas ! > De plus, j'avais mis une espace d'un fichier test.jpg > Pour éviter cela peut-être qu'il est inutile d'utiliser un strip() sur > listdir(getcwd()) Un réflexe que j'essaie d'adopter autant que possible, surtout en cas de debug, consiste à inclure l'instruction qui plante dans un try/except: try: rename(list_jpg_strip[i],list_names[i]) except OSError: print 'list_jpg_strip[i] =', list_jpg_strip[i], 'list_names[i] =', list_names[i] Et là tu aurais compris par toi-même l'erreur ;o) D'ailleurs dans le cas de manipulation de fichiers, je crois qu'il est mieux de toujours effectuer les opérations dans un try/except, car rien ne te garantit que le fichier est présent, accessible en lecture et/ou écriture, etc.... Voir également sys.exc_info() si tu veux gérer l'information concernant l'exception qui s'est produite pour la retourner à l'utilisateur, ou effectuer un traitement circonstancié. > Merci. 2 rien ... > Rémi. |
|
![]() |
| Outils de la discussion | |
|
|