2013-06-23 4 views
3

Я просто написал сценарий питона, чтобы избавиться от некоторых раздражающих суффиксов в именах файлов,Python os.rename и os.walk вместе

вот мой код:

import os 

for root, dirs, files in os.walk("path"): 

    for filename in files: 

     if filename.endswith("[AnnoyingTag].mov"): 

      os.rename(filename, filename[:-18]+'.mov') 

, но я получил ошибку в последняя строка:

OSError: [Errno 2] No such file or directory 

Я уверен, что у меня есть правильный путь, потому что я могу распечатать все имена файлов правильно.

... действительно не знаю, почему это не может работать.

Спасибо за ваши ответы

+0

'list (os.walk (" path "))' – JBernardo

+0

Почему вы не печатаете имя файла перед вызовом переименования? Попробуйте отладить. –

+0

Я сделал, и он правильно напечатал все имена файлов. Я попробовал тип (имя файла), и все они возвращают строки. –

ответ

8

Вы можете заменить

os.rename(filename, filename[:-18]+'.mov') 

с

os.rename(root + os.sep + filename, root + os.sep + filename[:-18]+'.mov') 
+0

Спасибо! Оно работает. но могу ли я спросить, почему исходный код будет работать? –

+1

В функции os.rename вы должны указать полный путь, иначе он будет искать файл в каталоге, где вызывается ваш скрипт. Я не очень уверен, что «почему исходный код работал» вы имели в виду. –

+0

О, я имею в виду, не хотел. Спасибо за объяснение, я многому научился –

1

Исправлено:

import os 

for root, dirs, files in os.walk("path"): 
    for filename in files: 
     if filename.endswith("[AnnoyingTag].mov"): 
      os.rename(root+'\\'+filename, root+'\\'+filename[:-18]+'.mov') 

Я думаю, ваша проблема заключается в том, что файлы вы переименовывать не в текущем рабочем каталоге.

10

Предпочтительный способ присоединиться путей заключается в использовании os.path.join, измените эту строку:

os.rename(filename, filename[:-18]+'.mov') 

Замените его следующим образом:

os.rename(os.path.join(root, filename), os.path.join(root, filename[:-18]+'.mov')) 
+0

Спасибо! Оно работает. но могу ли я спросить, почему исходный код будет работать? –

Смежные вопросы