Python 如果文件夹中存在文件,请更改文件夹的名称

Python 如果文件夹中存在文件,请更改文件夹的名称,python,Python,我有一个非常大的目录树,如果文件夹中有文件,我想通过它自动更改文件夹名称。以下是我目前的情况: import os import shutil from os import path import glob # Directory to be scanned os.chdir('U:\\') path = '.' # r=root, d=directories, f = files for r, d, f in os.walk(path): for file in f:

我有一个非常大的目录树,如果文件夹中有文件,我想通过它自动更改文件夹名称。以下是我目前的情况:

import os 
import shutil 
from os import path
import glob

# Directory to be scanned 
os.chdir('U:\\')
path = '.'

# r=root, d=directories, f = files
for r, d, f in os.walk(path):
    for file in f:
        if '.txt' in file:
            dir_path = os.path.dirname(os.path.realpath('stuff.txt'));

            os.rename(dir_path, dir_path + '_data')
我收到以下错误,但目前没有管理员权限,无法确保脚本正常工作

PermissionError:[WinError 32]进程无法访问该文件,因为另一个进程正在使用该文件:“U:\”->“U:\ \U数据”


您收到的错误消息似乎与任何权限问题无关。我建议打开“计算机管理”并转到“共享文件夹>打开文件”。这将显示谁打开了文件,阻止您的重命名工作。

您不能以这种方式修改驱动器名(
U:///code>),因此您会收到第一个
许可错误。您也不能在迭代过程中修改目录名(
os.walk
),否则将丢失子文件夹。因此,我提议如下:

  • 创建空列表以记住要重命名的目录路径
  • 扫描完成后,反转列表并在其上迭代-这样,应该首先处理最长的路径
  • 重命名目录或通知错误
  • 代码如下:

    导入操作系统
    #要扫描的目录
    os.chdir('U:\\')
    路径='。'
    dirs_to_rename=list()
    对于os.walk(路径)中的根目录、目录和文件:
    对于文件中的文件:
    如果文件中有“.txt”:
    dirs\u to\u rename.append(根目录)
    打破
    对于dir_to_rename in dirs_to_rename[::-1]:
    尝试:
    打印(f“将{dir_重命名为{u rename}”)
    重命名(dir_to_rename,dir_to_rename+“_data”)
    除O错误为e外:
    打印(f“跳过{dir_to_rename}-{e}”)
    

    我很快用几层文件夹运行了它,它似乎运行得很好,但您可能需要对它进行一些调整。

    尝试
    list(os.walk)
    ,一次获取所有名称。

    听起来好像另一个进程正在访问您试图重命名的目录。确保没有运行任何可能会执行此操作的内容。我认为问题在于您正在更改正在迭代的内容。谢谢!我还意识到应该在
    dirs\u to\u rename.append(root\u dir)
    之后插入一个
    break
    ,以避免两次添加相同的路径。编辑了答案以反映这一点。