Python递归重命名目录。

3
我编写了一个脚本,可以递归地重命名包含空格或特殊字符的目录名称:
import os
import re
import pdb

def renameInvalid(root):
    print("root is: " + root)
    for f in os.listdir(root):        
        if os.path.isdir(f):            
            old = f
            f = f.replace(" ", "_")
            f = re.sub(r'[^a-zA-Z0-9-_]', '',f)
            if old != f:
                print(root + " na substitutie")
                os.rename(old,f)
                print(root + " na hernoemen")
                print("renamed " + old + " to " + f )
                #pdb.set_trace() 
                f = '/' + f
                pad = root + f                
                renameInvalid(str(pad))

mountpunt = os.getcwd()
renameInvalid(mountpunt)

您可以通过创建两个包含空格名称的目录来测试此脚本。您将其中一个目录放置在另一个目录内,并从第一个目录内运行脚本。该脚本重命名第一个目录,但在isdir(f)上生成OSError错误。 有人知道这里的问题是什么吗?
敬礼,

我不建议在本地计算机上运行未经测试的更改人们文件系统的脚本。你需要一个沙盒环境(如虚拟机)来测试这种东西。 - Zev
1个回答

4
我找到了答案(感谢timbaileyjones提供的解决方案)。
import os
import re

def renameInvalid(root):    
    for f in os.listdir(root):        
        old = f
        f = f.replace(" ", "_")
        f = re.sub(r'[^a-zA-Z0-9-_]', '',f)
        if old != f:                              
                os.rename(old,f)                
                print("renamed " + old + " to " + f )
        if os.path.isdir(f):
            os.chdir(f)
            renameInvalid(".")
            os.chdir("..")            

renameInvalid(".")

只有当用户知道自己在做什么时,才应运行此代码。它会重命名所有文件夹和文件名中包含空格或特殊字符的项。

祝好!


我忘了说点代表当前目录,双点是父目录。 - Reginald Carlier
还要在正则表达式中加一个点(在下划线后面),否则分隔文件扩展名的点会消失。 - Reginald Carlier

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接