递归脚本重命名以空格或句点结尾的文件夹

1 投票
2 回答
504 浏览
提问于 2025-04-17 20:47

我们刚把存储服务器换成了一个新的文件系统。旧的文件系统允许用户在文件夹名字的最后加上一个点或者空格,但新的系统把这个当成不合法的字符。我要怎么写一个Python脚本,去遍历所有的文件夹,把那些名字最后有点或者空格的文件夹重命名呢?

2 个回答

0

你可以使用 os.listdir 来列出某个路径下的文件夹和文件。这个方法会返回一个列表,你可以逐个查看这个列表里的内容。对于列表中的每一项,使用 os.path.join 将文件或文件夹的名字和它的父路径结合起来,然后用 os.path.isdir 来检查它是不是一个文件夹。如果是文件夹,就检查它名字最后一个字符是否有效,如果不合法,就用 os.rename 来修改这个文件夹的名字。等文件夹名字改好了,你可以用这个文件夹的完整路径作为基础路径,重复整个过程。我建议把这个过程放在一个递归函数里,这样可以更方便地处理。

2

使用 os.walk。给它一个根目录的路径,它会递归地遍历这个目录。可以这样做:

for root, dirs, files in os.walk('root path'):
    for dir in dirs:
        if dir.endswith(' ') or dir.endswith('.'):
            os.rename(...)

编辑:

其实我们应该先重命名叶子目录——这里有个解决办法:

alldirs = []
for root, dirs, files in os.walk('root path'):
    for dir in dirs:
        alldirs.append(os.path.join(root, dir))

# the following two lines make sure that leaf directories are renamed first
alldirs.sort()
alldirs.reverse()

for dir in alldirs:
    if ...:
        os.rename(...)

撰写回答