假设我在许多不同的文件夹中有多个子文件夹 (**)。所有文件夹都位于名为 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”,但我想自动化该过程。
我正在重命名文件夹名称,而不是文件本身。
让我们看看这是否适合您:
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))
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