2013-03-09 59 views
0

這是通過我的1TV目錄並移動和重命名它找到的文件。將找到的每個文件移動到具有演出名稱和季節的文件夾中。這些文件將使用Show + episode +文件擴展名重命名。我現在手動添加文件擴展名,因爲我仍在測試我的代碼。我會盡可能地整理它。Python在不同文件夾之間移動文件

問題是,我得到一個錯誤,當我嘗試和移動文件

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

,因爲我在Mac上我已經處理了.DS_Store文件。但類型錯誤,我不明白爲什麼我得到試圖改變周圍做之前等在呼叫中的字符串沒有運氣

#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 

任何幫助,非常感謝我的代碼。順便說一句:這是一個非常原始的版本,我會整理一下,一旦我得到它運行一些什麼。

回答

4

您試圖將IOError例外連接到字符串"IOError "。只需使用而不是逗號:

print "IOError", detail 

,其中將包括單詞IOError了,所以一個簡單的:

print detail 

應該足夠了。

您可能正在獲得IOError s,因爲您使用的是相對文件名,但您的源文件在子目錄中列出; 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缺少右)我固定起來 – 2013-03-10 00:45:49

+0

高興它爲你工作;現在修正了缺失的括號。 :-) – 2013-03-10 01:09:40

+0

謝謝堆,另外爲了解釋,我可以看到我現在出錯了,現在清理代碼:p – 2013-03-10 05:32:54

相關問題