2013-03-09 6 views
0

Это мой опыт в моем каталоге 1TV и перемещение и переименование найденных файлов. Переместите каждый найденный файл в папку с названием шоу, а затем в сезон. Файлы должны быть переименованы в Show + episode + file extension. Я вручную добавляю расширение файла в настоящий момент, пока я все еще проверяю свой код. Я буду так аккуратным.Python перемещает файлы между разными папками.

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

!!! .DS_Store Can't handle !!! 
Elementary/S01/Elementary14.mp4 
TypeError: "cannot concatenate 'str' and 'exceptions.IOError' objects" 

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

#Rename files 
#NAME.S##.E##.QUALITY.USER.FILETYPE 

#Elementary.S01E15.HDTV.x264-LOL.mp4 
#Greys.Anatomy.S09E13.HDTV.x264-LOL.mp4 

import os 
import shutil 

def checkCreateDir(f): 
    if not os.path.exists(f): 
     os.makedirs(f) 

#Main LOOP 
for filename in os.listdir("./1TV"): 
    try: 
     firstDot = filename.index('.S') 
     name = filename[:firstDot].replace("."," ") 
     season = filename[firstDot+1:firstDot+4] 
     episode = filename[firstDot+5:firstDot+7] 

     #File movement 
     checkCreateDir(name) 
     checkCreateDir(name+"/"+season) 
     newFilename = name+"/"+season+"/"+name+episode+".mp4" 
     print newFilename 
     shutil.move(filename,newFilename) 

     print name + "\t"+ season + "\t" + episode 
    except ValueError: 
     print "!!! " + filename + " Can't handle !!!" 
    except IOError as detail: 
     print "IOError " + detail 

Любая помощь очень ценится. BTW: Это очень грубая версия, которую я буду убирать, как только у меня это получится.

ответ

4

Вы пытаетесь объединить исключение IOError в строку "IOError ". Просто используйте запятую вместо:

print "IOError", detail 

, который будет включать в себя слово IOError уже, так просто:

print detail 

должно хватить.

Возможно, вы получаете IOError, потому что используете относительные имена файлов, но исходные файлы указаны в подкаталоге; os.listdir() перечислены только базовые имена файлов, каталоги не в комплекте.

Использование os.path.join() для построения пути вместо строки форматирования для других строк:

checkCreateDir(name) 
checkCreateDir(os.path.join(name, season)) 
newFilename = os.path.join(name, season, '{}{}.mp4'.format(name, episode)) 
print newFilename 
shutil.move(os.path.join('./1TV', filename), newFilename) 
+0

Понял работать Thnx кучки кстати newFileline и второй checkCreateDir отсутствует закрывающий) Я установил их –

+0

рад, что работал для вас ; отсутствующая скобка теперь исправлена. :-) –

+0

Спасибо, кучи, Также за разъяснение я вижу, где я сейчас ошибся, чтобы привести код в порядок: p –