Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Renommer des fichiers

6 réponses
Avatar
r
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

6 réponses

Avatar
alain
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...

Avatar
MC
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
Avatar
r
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.

Avatar
r
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 : ['tatan', 'teten']
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.

Avatar
Pierre Quentel
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


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
Avatar
r
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.