2013-06-29 4 views
2

Я пишу скрипт, чтобы изменить все файлы .mp3, .m4a и .m4p в каталоге ./itunes и music/F14/'на другой заголовок , Я могу получить имена файлов, и используя hsaudiotag, я могу получить тег title. Однако, когда я пытаюсь переименовать файл в тег заголовка он дает мне ошибку:os.rename() не работает в моем скрипте python

WindowsError: [Error 2] The system cannot find the file specified 

Вот мой код:

from hsaudiotag import auto 
import os 

def main(): 
    for filename in os.listdir('./itunes and music/F14/'): 
     print(filename) 
     os.rename(filename, filename[2:]) 
     myfile = auto.File('./itunes and music/F14/'+filename) 
     print(myfile.title) 
     if filename.endswith(".mp3"): 
      print('3') 
      os.rename(filename, myfile.title+".mp3") 
     elif filename.endswith(".m4a"): 
      print('4a') 
      os.rename(filename, myfile.title+".m4a") 
     elif filename.endswith(".m4p"): 
      print('4p') 
      os.rename(filename, myfile.title+".m4p") 

main() 

Все инструкции печати только для отладки, и все они работают нормально. Это просто функция os.rename(), которой нет.

+0

Правильно ли печатается имя файла? –

+0

Да, все имена файлов печатаются ОК. – Sonofblip

ответ

6

Укажите путь к файлу, а не только имя файла.

from hsaudiotag import auto 
import os 

def main(): 
    d = './itunes and music/F14/' 
    for filename in os.listdir(d): 
     print(filename) 
     filepath = os.path.join(d, filename) 
     os.rename(filepath, filepath[2:]) 
     myfile = auto.File(filepath) 
     print(myfile.title) 
     if filename.endswith(".mp3"): 
      print('3') 
      os.rename(filepath, os.path.join(d, myfile.title+".mp3")) 
     elif filename.endswith(".m4a"): 
      print('4a') 
      os.rename(filepath, os.path.join(d, myfile.title+".m4a")) 
     elif filename.endswith(".m4p"): 
      print('4p') 
      os.rename(filepath, os.path.join(d, myfile.title+".m4p")) 

main() 
+0

Это работает для всех файлов .mp3, в файлах .m4a и .m4p, которые я до сих пор получаю: WindowsError: [Ошибка 123] Неверное имя файла, имя каталога или тома. – Sonofblip

+0

@ user2528556, проверьте, title содержит недопустимый символ для имени файла. '\ /: *? < > | '. Замените такие символы. – falsetru