PHWinfo banniere

Titres
PORTAIL ANNUAIRE ARTICLES COMPARATEUR HÉBERGEURS DEVIS FORUMS RÉDUCTEUR D'URL
Précédent   PHWinfo > Autres forums > Forum Programmation & Conception > fr.comp.lang.python > Renommer des fichiers à partir d'une liste
S'inscrire FAQ Membres Recherche Messages du jour Marquer les forums comme lus
Renommer des fichiers à partir d'une liste

Réponse
 
LinkBack Outils de la discussion
Vieux 14/09/2007, 19h40   #1
rémi
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Renommer des fichiers à partir d'une liste

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
  Réponse avec citation
Vieux 14/09/2007, 21h35   #2
alain
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Renommer des fichiers à partir d'une liste

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...
  Réponse avec citation
Vieux 14/09/2007, 21h35   #3
alain
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Renommer des fichiers à partir d'une liste

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...
  Réponse avec citation
Vieux 15/09/2007, 04h00   #4
MC
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Renommer des fichiers à partir d'une liste

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


  Réponse avec citation
Vieux 15/09/2007, 04h00   #5
MC
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Renommer des fichiers à partir d'une liste

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


  Réponse avec citation
Vieux 15/09/2007, 13h57   #6
rémi
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Renommer des fichiers à partir d'une liste

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.
  Réponse avec citation
Vieux 15/09/2007, 13h57   #7
rémi
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Renommer des fichiers à partir d'une liste

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.
  Réponse avec citation
Vieux 15/09/2007, 14h01   #8
rémi
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Renommer des fichiers à partir d'une liste

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.
  Réponse avec citation
Vieux 15/09/2007, 14h01   #9
rémi
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Renommer des fichiers à partir d'une liste

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.
  Réponse avec citation
Vieux 16/09/2007, 08h40   #10
Pierre Quentel
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Renommer des fichiers à partir d'une liste

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

  Réponse avec citation
Vieux 16/09/2007, 08h40   #11
Pierre Quentel
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Renommer des fichiers à partir d'une liste

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

  Réponse avec citation
Vieux 19/09/2007, 13h56   #12
rémi
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Renommer des fichiers à partir d'une liste

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.
  Réponse avec citation
Vieux 19/09/2007, 13h56   #13
rémi
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Renommer des fichiers à partir d'une liste

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.
  Réponse avec citation
Vieux 19/09/2007, 21h48   #14
Cémoi
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Renommer des fichiers à partir d'une liste

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.

  Réponse avec citation
Vieux 19/09/2007, 21h48   #15
Cémoi
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Renommer des fichiers à partir d'une liste

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.

  Réponse avec citation
Réponse


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Fuseau horaire GMT +1. Il est actuellement 23h08.


Édité par : vBulletin® version 3.7.3
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0 RC5 Tous droits réservés.
Version française #16 par l'association vBulletin francophone
PHWinfo est un site Éducation Sans Frontières ©2000-2008
Ad Management by RedTyger
©Tous droits réservés par les parties respectives
Page generated in 0,24976 seconds with 23 queries