重命名子文件夹py

时间:2017-12-14 13:01:34

标签: python file-rename

我必须在主目录中重命名包含子文件夹的图像,我正在使用的脚本现在做一些工作但不完全是我需要的东西:我找不到正确的方法,现在我拥有它:

maindir #my example origin
├── Sub1
│   ├── example01.jpg
│   ├── example02.jpg
│   └── example03.jpg
└── Sub2
    ├── example01.jpg
    ├── example02.jpg
    └── example03.jpg

我的脚本这样做:

maindir
├── Sub1
│   ├── Sub1_example01.jpg
│   ├── Sub1_example02.jpg
│   └── Sub1_example03.jpg
└── Sub2
    ├── Sub2_example01.jpg
    ├── Sub2_example02.jpg
    └── Sub2_example03.jpg

我想得到它:用我的子文件夹名称替换我的文件名中的字母并保留我的jpg的原始编号:

maindir
├── Sub1
│   ├── Sub1_01.jpg
│   ├── Sub1_02.jpg
│   └── Sub1_03.jpg
└── Sub2
    ├── Sub2_01.jpg
    ├── Sub2_02.jpg
    └── Sub2_03.jpg

我的代码4是我使用的代码:

from os import walk, path, rename
parent = ("F:\\PS\\maindir")
for dirpath, _, files in walk(parent):
    for f in files:
        rename(path.join(dirpath, f), path.join(dirpath, path.split(dirpath)[-1] + '_' + f))

我必须改变一下才能得到我的结果???

1 个答案:

答案 0 :(得分:0)

而不是那一行:

rename(path.join(dirpath, f), path.join(dirpath, path.split(dirpath)[-1] + '_' + f))

使用str.replace生成新名称:

newf = f.replace("example",os.path.basename(dirpath)+"_")

然后

rename(path.join(dirpath, f), path.join(dirpath,newf))

当然如果您不知道输入文件的扩展名或“前缀”,并且只想保留数字&扩展,有一种方法:

import re
number = (re.findall("\d+",f) or ['000'])[0]

这会从名称中提取数字,如果找不到,则会发出000

然后使用文件夹名称,提取的数字和&amp ;,重建newf。原始扩展名:

newf = "{}_{}.{}".format(os.path.basename(dirpath),number,os.path.splitext(f)[1])