我下载了具有非常长文件名的播客,我正在剥离它们,以便它们只有城市名称,日期和小时(意味着第一,第二或第三小时)。除了os.rename(file,new_name)之外,它似乎都工作,它告诉我Windows无法访问该文件。
import re, os, glob
from ID3 import *
for files in glob.glob("f:\\Download\*podcasts*"):
os.chdir(files)
for file in os.listdir("."):
if re.search("\A[1-3].",file): # original filenames begin with 1.,2. or 3.
tags=ID3(file)
date = re.search("\w*.-\w*.-\w*.",file) # filenames contain date in MMM-DD-YYYY
date_clean = date.group(0).strip()
hour = re.search("hr\d", file) # file names also contain hr. 1,2 or 3 at end
hour_clean = hour.group(0).strip()
tags['ARTIST'] = "Portland Podcast"
tags['TITLE'] = date_clean + hour_clean
new_name = "Portland-" + date_clean + "-" + hour_clean +".mp3"
print "Changing",file,"to",new_name+"."
os.rename(file,new_name)
os.chdir("F:\\Download")
os.getcwd()
os.system("pause")
答案 0 :(得分:0)
有些东西持有你试图移动的文件的引用。在try/except
周围放置一个shutil.rename
块,然后打印出导致问题的文件。当您找出导致问题的文件时,找出谁持有对它的引用。
查找谁持有文件引用的一种方法是使用Process Explorer或Unlocker
更新
我看了一下ID3库的代码,看来,如果传入文件名,它就不会关闭文件,EVER:D
您应该执行以下操作:
with open(filename, 'rb') as f:
tags = ID3(f)
# do your stuff
shutil.rename(filename, ...)