通过替换字符串的一部分来重命名多个文件夹中的子文件夹

问题描述 投票:0回答:2

假设我在许多不同的文件夹中有多个子文件夹 (**)。所有文件夹都位于名为 Project1 的主文件夹中。我想使用

substring
函数替换文件夹的字符串名称。

import glob
import os 
import pandas as pd

paths = glob.glob("CC:/Users/xxx/College/Project1/**/", recursive=True)

假设子文件夹在多个文件夹中,命名约定如下:

fwjekljfwelj-10-fwefw (the path for this folder is "CC:/Users/xxx/College/Project1/**/wjekljfwelj-10-fwefw/")
kljkgpjrjrel-11-wwref
fwefjkecmuon-12-cfecd
dsfshncrpout-13-lplce

- 字符之前的字母数字序列没有意义。我想用数字 20 替换虚线之前的字符串。因此,新的子文件夹将是:

2010-fwefw
2011-wwref
2012-cfecd
2013-lplce

我可以使用

str.split('-', 1)[-1]
为每个子文件夹单独执行此操作,然后在名称后附加“20”,但我想自动化该过程。 我正在重命名文件夹名称,而不是文件本身。

python python-3.x pandas
2个回答
0
投票

让我们看看这是否适合您:

import os
import glob

# define the base folder
base_folder = "CC:/Users/xxx/College/Project1"

# get all the subfolders
subfolders = glob.glob(os.path.join(base_folder, "**/"), recursive=True)

# iterate over the subfolders
for folder_path in subfolders:
    # get the folder name
    folder_name = os.path.basename(folder_path)
    # split the folder name by the "-" character
    parts = folder_name.split("-")
    # construct the new folder name
    new_folder_name = "20" + parts[-1]
    # get the parent folder path
    parent_folder = os.path.dirname(folder_path)
    # construct the new folder path
    new_folder_path = os.path.join(parent_folder, new_folder_name)
    # rename the folder
    os.rename(folder_path, os.path.join(parent_folder, new_folder_path))

0
投票

您可以将

os.walk
topdown=False
一起使用:

import re
import os

top_dir = 'CC:/Users/xxx/College/Project1'

for dirpath, dirnames, filenames in os.walk(base_dir, topdown=False):
    for dirname in dirnames:
        if re.search(r'-\d{2}-', dirname):
            new_dirname = f"20{dirname.split('-', 1)[1]}"
            new_dirpath = os.path.join(dirpath, new_dirname)
            old_dirpath = os.path.join(dirpath, dirname)
            print(f'{old_dirpath} -> {new_dirpath}')
            os.rename(old_dirpath, new_dirpath)

之前:

Project1
└── fldr1
    ├── dsfshncrpout-13-lplce
    ├── fwefjkecmuon-12-cfecd
    ├── fwjekljfwelj-10-fwefw
    └── kljkgpjrjrel-11-wwref

之后:

Project1
└── fldr1
    ├── 2010-fwefw
    ├── 2011-wwref
    ├── 2012-cfecd
    └── 2013-lplce
© www.soinside.com 2019 - 2024. All rights reserved.