0

最好浏览我的 1TV 目录并移动和重命名它找到的文件。将找到的每个文件移动到带有节目名称和季节的文件夹中。这些文件将被重命名为 Show + episode + 文件扩展名。我目前正在手动添加文件扩展名,因为我仍在测试我的代码。我会把它整理好。

问题是当我尝试移动文件时出现错误

!!! .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异常连接到 string "IOError "。只需使用逗号代替:

print "IOError", detail

其中IOError已经包含了这个词,所以很简单:

print detail

应该足够了。

您可能得到IOErrors 因为您使用的是相对文件名,但您的源文件列在子目录中;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 回答