Python在不同文件夹间移动文件
我想要写一个程序,它可以遍历我的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)