使用 python 重命名目录中的某些子文件夹

Rename certain subfolders in a directory using python

我的文件夹结构如下所示:

/Forecasting/as_of_date=20220201/type=full/export_country=Spain/import_country=France/000.parquet'

大约有 2500 个这样的结构。

我正在尝试仅重命名某些子文件夹,主要是 export_country 重命名为 exp_ctyimport_country 重命名为 imp_cty

到目前为止我试过了,但它似乎不起作用。我从来不必处理如此复杂的文件夹结构,而且我有点不确定该怎么做。我的脚本如下:

import os
from pathlib import Path
path = r"/datasets/local/Trade_Data"       # Path to directory that will be searched

old = "import_country*"
new = "imp_cty"
for root, dirs, files in os.walk(path, topdown=False):      # os.walk will return all files and folders in thedirectory
    for name in dirs:                                       #  only concerned with dirs since I only want to change subfolders
        directoryPath = os.path.join(root, name)            # create a path to subfolder
        if old in directoryPath:                            # if the 'export_country' is found in my path then
            parentDirectory = Path(directoryPath).parent    # save the parent directory path
            os.chdir(parentDirectory)                       # set parent to working directory
            os.rename(old, new)   

您提出的代码有 2 个问题:

第一个:if old in directoryPath: 检查字符串 import_country* 是否在路径内。

根据你的问题我了解到你想重命名所有以“import_country”开头的目录 所以你可以使用startswith

第二个问题是 os.rename(old, new) 您正在尝试重命名不存在的 import_country* 目录,您应该使用 name 变量。

这是您的代码,稍作更改后可以正常工作,请注意,您必须使用 topdown=False,因为您在遍历目录时重命名目录:

import os
from pathlib import Path

path = "/datasets/local/Trade_Data"
old_prefix = "import_country"
new_name = "imp_cty"
for root, dirs, files in os.walk(path, topdown=False):
    for name in dirs:
        if name.startswith(old_prefix):
            directoryPath = os.path.join(root, name)
            parentDirectory = Path(directoryPath).parent
            os.chdir(parentDirectory)
            os.rename(name, new_name)