重命名子文件夹中的部分文件名 python
Rename part of filenames in sub-folders python
我必须重命名包含子文件夹的主目录中的图像,我现在使用的脚本做了一些工作但不完全是我需要的:我找不到正确的方法,现在我有它:
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))
我必须在这里更改什么才能得到我的结果???
而不是那一行:
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))
当然如果你不知道输入文件的扩展名或"prefix",只想保留号码和扩展名,有一个方法:
import re
number = (re.findall("\d+",f) or ['000'])[0]
这会从名称中提取数字,如果找不到,则发出 000
。
然后用文件夹名称、提取的数字和原始扩展名重建newf
:
newf = "{}_{}.{}".format(os.path.basename(dirpath),number,os.path.splitext(f)[1])
我必须重命名包含子文件夹的主目录中的图像,我现在使用的脚本做了一些工作但不完全是我需要的:我找不到正确的方法,现在我有它:
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))
我必须在这里更改什么才能得到我的结果???
而不是那一行:
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))
当然如果你不知道输入文件的扩展名或"prefix",只想保留号码和扩展名,有一个方法:
import re
number = (re.findall("\d+",f) or ['000'])[0]
这会从名称中提取数字,如果找不到,则发出 000
。
然后用文件夹名称、提取的数字和原始扩展名重建newf
:
newf = "{}_{}.{}".format(os.path.basename(dirpath),number,os.path.splitext(f)[1])