Regex 查找并重命名目录中与特定模式匹配的所有文件
我正在尝试编写一个程序,该程序将循环遍历每个子文件夹,查找并重命名与文件名中给定模式匹配的所有文件。这些文件都是.jpg文件,具有以下模式:Regex 查找并重命名目录中与特定模式匹配的所有文件,regex,python-3.x,glob,file-rename,Regex,Python 3.x,Glob,File Rename,我正在尝试编写一个程序,该程序将循环遍历每个子文件夹,查找并重命名与文件名中给定模式匹配的所有文件。这些文件都是.jpg文件,具有以下模式: [0-9][0-9][0-9]_UsersfirstnameUserslastname[0-9][0-9][0-9].jpg 例如,一个文件夹将具有以下内容: 452_AlexBobenko002.jpg 452_AlexBobenko003.jpg 452_AlexBobenko007.jpg path = mydir folders = [f
[0-9][0-9][0-9]_UsersfirstnameUserslastname[0-9][0-9][0-9].jpg
例如,一个文件夹将具有以下内容:
452_AlexBobenko002.jpg
452_AlexBobenko003.jpg
452_AlexBobenko007.jpg
path = mydir
folders = [filename for filename in os.listdir(path) if filename.startswith('EMP-')]
subfolders = [[] for i in range(len(folders))]
# Will populate the empty sublist of subfolders with the contents of each distinct folder
for i in range(len(folders)):
subfolders[i] = [subfolder for subfolder in os.listdir(path +'\\%s' %folders[i])]
for z_1 in range(len(folders)):
for z_2 in range(len(subfolders[z_1])):
if os.path.isdir(path + '\\%s\\%s' % (folders[z_1], subfolders[z_1][z_2])) == True:
for file in glob.glob(path + '\\%s\\%s\\[0-9][0-9][0-9]_*.jpg' % (folders[z_1], subfolders[z_1][z_2])):
#rename(file)
然后它将转到另一个文件夹,其中存在以下文件:
834_CatDonald001.jpg
...
834_CatDonlad126.jpg
我想重命名这些文件,以便在最后一个字母之后和最后一组3位数字之前有一个下划线。因此,模式将从:
[0-9][0-9][0-9]_UsersfirstnameUserslastname[0-9][0-9][0-9].jpg
到
根据上面的例子,我会:
452_AlexBobenko002.jpg --> 452_AlexBobenko_002.jpg
452_AlexBobenko003.jpg --> 452_AlexBobenko_003.jpg
452_AlexBobenko007.jpg --> 452_AlexBobenko_007.jpg
及
到目前为止,我已经能够通过以下方式找到所需的文件:
452_AlexBobenko002.jpg
452_AlexBobenko003.jpg
452_AlexBobenko007.jpg
path = mydir
folders = [filename for filename in os.listdir(path) if filename.startswith('EMP-')]
subfolders = [[] for i in range(len(folders))]
# Will populate the empty sublist of subfolders with the contents of each distinct folder
for i in range(len(folders)):
subfolders[i] = [subfolder for subfolder in os.listdir(path +'\\%s' %folders[i])]
for z_1 in range(len(folders)):
for z_2 in range(len(subfolders[z_1])):
if os.path.isdir(path + '\\%s\\%s' % (folders[z_1], subfolders[z_1][z_2])) == True:
for file in glob.glob(path + '\\%s\\%s\\[0-9][0-9][0-9]_*.jpg' % (folders[z_1], subfolders[z_1][z_2])):
#rename(file)
我真的不知道如何重命名它们因为您知道原始文件以3位数字加上
.jpg
扩展名的模式结尾,您可以通过字符串索引抓住这一部分:filename[:-7]+'.'+filename[-7:]
。谢谢,我正在尝试使用regex或fnmatch找到一种方法,我没想到会这么简单。