0

私の1TVディレクトリを調べて、見つかったファイルを移動して名前を変更することをお勧めします。見つかった各ファイルを、ショー名とシーズンの名前が付いたフォルダーに移動します。ファイルの名前は、Show+エピソード+ファイル拡張子に変更されます。コードをテストしているので、現時点ではファイル拡張子を手動で追加しています。私はそれをとても片付けます。

問題は、ファイルを移動しようとするとエラーが発生することです

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

Macを使用しているので、.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

どんな助けでも大歓迎です。ところで:これは非常に生のバージョンです。何かを実行したら、片付けます。

4

1 に答える 1

4

IOError例外を文字列に連結しようとしています"IOError "。代わりにコンマを使用してください。

print "IOError", detail

これにはすでに単語が含まれているIOErrorので、単純です。

print detail

十分なはずです。

相対ファイル名を使用しているためにsを取得している可能性があり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)
于 2013-03-09T23:08:33.693 に答える