重命名其中的文件夹和文件

时间:2017-01-21 06:39:36

标签: python python-3.x

上面的代码将一组文件夹中的所有文件重命名为"文件x在x级深度"使用它当前的文件名详细信息,但是我希望它将这些文件的文件夹重命名为"文件夹x在x级别深层",但是它给出了一个错误,说该文件夹已在另一个进程中打开。上面的评论是我迄今为止所做的(没有成功),其余的是按照需要工作。

{{1}}

我认为问题是它在程序重命名文件夹后重命名文件,使其失去"丢失"文件的原始位置。有人可以看看我做错了什么?谢谢!

以下是文件夹/文件集以及运行脚本后我希望它如何查看:https://drive.google.com/drive/u/1/folders/0B8pLYoI76JJiOEtpNzdaYVZrVXM

1 个答案:

答案 0 :(得分:0)

我重构了你的代码以使其工作。我还跟踪了递归中的deep,但如果您愿意,也可以依赖您的文件名:

import os, re
import os.path
from contextlib import contextmanager

@contextmanager
def change_dir(directory):
    wd = os.getcwd()
    try:
        os.chdir(directory)
        yield directory
    finally:
        os.chdir(wd)


def rename_file(filename, deep, is_dir=False):
    if is_dir:
        complete_filename = re.search("(deep)([0-9])(FOLDER)([0-9])", filename)
        file_number = complete_filename.group(4)
        new_filename = "Folder {} at {} levels deep".format(file_number, deep)
    else:
        complete_filename = re.search("(deep)([0-9])(FILE)([0-9])", filename)
        file_number = complete_filename.group(4)
        extension = os.path.splitext(filename)[1]
        new_filename = "File {} at {} levels deep{}".format(file_number, deep, extension)

    os.rename(filename, new_filename)


def every_directory(path, deep=0):
    deep += 1
    for file in os.listdir(path):
        is_dir = False
        filepath = os.path.join(path, file)
        if os.path.isdir(filepath):
            every_directory(filepath, deep)
            is_dir = True
        with change_dir(path):
            rename_file(file, deep=deep, is_dir=is_dir)