2011-09-19 14 views
6

Piszę prosty skrypt w języku Python, aby zmienić nazwy wszystkich plików w katalogu, aby zastąpić wszystkie spacje w nazwie pliku łącznikami. Mam następujący która jest upaść na os.renameZmiana nazw plików zawierających spacje

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

daje błąd w konsoli:

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

Wszelkie pomysły, dlaczego tak się dzieje?

Odpowiedz

19

myślę, że to tylko dlatego, że mają składnię złego w wywołaniu do os.path.join, dołączane elementy powinny być dostarczane jako dwa odrębne argumenty oddzielone przecinkiem. Działa to dobrze dla mnie:

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

Jeśli jesteś już w katalogu, który zawiera pliki, które chcesz zmienić, nie trzeba dać absolutną ścieżkę:

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

+1 Rzeczywista błędu jest to, że nie przechodzą listę argumentów 'os.path.join' - złączyć ciągiem znaków z +, zamiast przekazywać przecinek -separowana lista - ale ponieważ jest to zbędne, po prostu ją usuń. – tripleee