假设我在许多不同的文件夹中有多个子文件夹(**).所有文件夹都位于名为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] for each 子文件夹单独执行此操作,然后在名称后添加‘20’,但我希望自动执行此过程. 我重命名的是文件夹名称,而不是文件本身.

推荐答案

您可以将os.walktopdown=False一起使用:

import re
import os

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

for dirpath, dirnames, filenames in os.walk(top_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

Python相关问答推荐

替换为Pandas

如何循环循环的每个元素并过滤掉Python rame中的条件

取相框中一列的第二位数字

为什么我的主页不会重定向到详细视图(Django)

获取Azure Pipelines以从pyproject.toml(而不是relevments_dev.文本)安装测试环境

如何在vercel中指定Python运行时版本?

在编写要Excel的数据透视框架时修复标题行

使用Ubuntu、Python和Weasyprint的Docker文件-venv的问题

Image Font生成带有条形码Code 128的条形码时出现枕头错误OSErsor:无法打开资源

多处理代码在while循环中不工作

大Pandas 胚胎中产生组合

如何将ctyles.POINTER(ctyles.c_float)转换为int?

如何让剧作家等待Python中出现特定cookie(然后返回它)?

ModuleNotFound错误:没有名为flags.State的模块; flags不是包

将tdqm与cx.Oracle查询集成

Python脚本使用蓝牙运行在Windows 11与raspberry pi4

不能使用Gekko方程'

计算天数

如何更改groupby作用域以找到满足掩码条件的第一个值?

Python Tkinter为特定样式调整所有ttkbootstrap或ttk Button填充的大小,适用于所有主题