Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 查找并重命名目录中与特定模式匹配的所有文件_Regex_Python 3.x_Glob_File Rename - Fatal编程技术网

Regex 查找并重命名目录中与特定模式匹配的所有文件

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

我正在尝试编写一个程序,该程序将循环遍历每个子文件夹,查找并重命名与文件名中给定模式匹配的所有文件。这些文件都是.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    = [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找到一种方法,我没想到会这么简单。