2011-09-19 11 views
6

Estoy escribiendo un script simple de Python para cambiar el nombre de todos los archivos en un directorio para reemplazar todos los espacios en el nombre del archivo con guiones. Tengo el siguiente, que se rompiendo en os.renameCambiar el nombre de los nombres de los archivos que contienen espacios

import os 

path = os.getcwd() 
filenames = os.listdir(path) 

for filename in filenames: 
    os.rename(os.path.join(path + filename), os.path.join(path + filename.replace(" ", "-"))) 

da el error en la consola:

Traceback (most recent call last): 
    File "<stdin>", line 2, in <module> 
OSError: [Errno 2] No such file or directory 

¿Alguna idea sobre por qué ocurre esto?

Respuesta

19

Creo que es sólo porque tiene una sintaxis incorrecta en su llamada Para os.path.join, los elementos que se unen deben proporcionarse como dos argumentos distintos, separados por una coma. Esto funciona muy bien para mí:

Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import os 
>>> path = os.getcwd() 
>>> filenames = os.listdir(path) 
>>> for filename in filenames: 
...  os.rename(os.path.join(path, filename), os.path.join(path, filename.replace(' ', '-'))) 
... 
>>> 
8

Si ya se encuentra en el directorio que contiene los archivos que desea cambiar el nombre, que no es necesario dar ruta absoluta:

for filename in filenames: 
    os.rename(filename, filename.replace(" ", "-")) 
+1

+1 El error real es que no se está de paso una lista de argumentos a 'os.path.join' - concatenar una cadena literal con +, en lugar de pasar una coma -lista separada-pero dado que esto es redundante, solo sácalo. – tripleee

Cuestiones relacionadas