从文件名中删除非字母数字字符并在Python中重命名

时间:2013-07-18 11:48:43

标签: python python-2.7

我正在尝试删除源文件夹中的非字母数字字符,并使用非字母数字字符将任何文件重命名为版本而不使用此代码。但是,每次运行模块时都会出现此错误,

Traceback (most recent call last):
  File "C:\tempstore\Filescan1", line 18, in <module>
    os.rename(filename,newfilename)
WindowsError: [Error 32] The process cannot access the file because it is being used by another process

请帮忙吗?

os.chdir("C:\\tempstore\\source")
file_list = glob.glob("*.mpg*")
for filename in file_list:
    if re.search('[^A-Za-z0-9._ ]+',filename,re.U) is not None:
        print filename + " <--Dodgy File"
        print re.sub('[^0-9a-zA-Z+_. ]+','-',filename)+ " <--Fixed File"
        newfilename =  re.sub('[^0-9a-zA-Z+_. ]+','-',filename)
        os.rename(filename,newfilename)
    elif re.search('[^A-Za-z0-9._ ]+',filename,re.U) is None:
        print filename +" <-- Normal File"
        unchanged_list = re.sub('[^A-Za-z0-9._ ]+','_',filename)
        print unchanged_list

2 个答案:

答案 0 :(得分:0)

关闭防病毒软件或至少将“On Access”扫描设置为关闭。我还建议使用re.sub生成newfilename然后使用它来打印输出和重命名,即:

    print re.sub('[^0-9a-zA-Z+_. ]+','-',filename)+ " <--Fixed File"
    newfilename =  re.sub('[^0-9a-zA-Z+_. ]+','-',filename)

应为:

    newfilename =  re.sub('[^0-9a-zA-Z+_. ]+','-',filename)
    print 'Renaming to:', newfilename

并摆脱你的例子的最后两行。

答案 1 :(得分:0)

解决! 出现错误的原因是Windows不允许您在打开的目录中编辑文件,而我的程序正在打开目录来编辑文件。实际上,Catch-22,您无法在打开的目录中编辑文件,但您必须打开目录才能编辑文件。 我已经使用shutil.copy移动文件,然后重命名它们,这很好 为我的菜鸟行为道歉!