2011-09-19 20 views
6

Sto scrivendo un semplice script Python per rinominare tutti i file in una directory per sostituire tutti gli spazi nel nome del file con trattini. Ho il seguente, che si blocca sul os.renameRidenominazione di nomi di file contenenti spazi

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(" ", "-"))) 

dà l'errore nella console:

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

Tutte le idee su perché questo sta accadendo?

risposta

19

penso che sia solo perché si ha la sintassi sbagliata nella chiamata a os.path.join, gli oggetti che stai unendo dovrebbero essere forniti come due argomenti distinti, separati da una virgola. Questo funziona bene per me:

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

Se sei già nella directory che contiene i file che si desidera rinominare, non è necessario dare percorso assoluto:

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

+1 L'errore effettivo è che non sta passando un elenco di argomenti a 'os.path.join' - si concatena una stringa letterale con +, invece di passare una virgola -elenco separato, ma poiché questo è ridondante, basta estrarlo. – tripleee

Problemi correlati