Python在不同文件夹间移动文件

0 投票
1 回答
1073 浏览
提问于 2025-04-17 18:32

我想要写一个程序,它可以遍历我的1TV文件夹,把找到的文件移动和重命名。每个文件会被移动到一个以节目名称和季节命名的文件夹里。文件的命名格式是“节目名 + 集数 + 文件扩展名”。现在我还在手动添加文件扩展名,因为我还在测试我的代码,等代码能正常运行后我会整理一下。

不过,我在尝试移动文件的时候遇到了一个错误。

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

我已经处理了.DS_Store文件,因为我用的是Mac。但我不明白为什么会出现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

任何帮助都会非常感激。顺便说一下:这只是一个非常初步的版本,等我让它能正常运行后会再整理一下。

1 个回答

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)

撰写回答