文件重命名中的抢占查找表规则

时间:2017-11-08 07:15:57

标签: python python-3.x

下面的代码选择文件名,每个查找表规则具有父目录名。它完美地运作。

然而,我如何在此代码中插入异常,以及 CWD以下一(1)级的所有文件(即{{}中的文件1}},=d5等非递归的永远不会附加父目录名?就像抢占或覆盖查询表 if 一样,它要求追加目录名。

文件名模式之前之后(请参阅前两个=a9示例,它们与=d5子网站不同):

aaa

代码:

CWD                                      
    00_camdirabde=d5                       
          /.nef,.jpg,.avi,.wav         #files 1 level below CWD -> NEVER append (even if =d5 string call for it from lookup table)
    01_camdirab=d5                       
          /aaa/ .nef,.jpg,.avi,.wav    #files not 1 level below CWD -> append per lookup table rule
    02_camdirxyz=g7                     
          /bbb/ddd/ .cr2,.jpg,.mp4
    03_camdire012345=a9                  
          /yyy/kkk/xxx/ .mp4,.jpg,.avi,.thm
    04_camdire012345                     
          / .mp4,.jpg,.avi

CWD                                      
    00_camdirabde=d5                       
          /.nef,.jpg,.avi,.wav                        #NOT appended files
    01_camdirab=d5                       
          /aaa/aaa_.nef, aaa_.jpg, aaa_.avi, .wav     #appended files
    02_camdirxyz=g7                      
          /bbb/ddd/.cr2,.jpg,.mp4                     #not appended, 'append_dir_to_filename'] = 0 
    03_camdire012345=a9                  
          /yyy/kkk/xxx/ xxx_.mp4, xxx_.jpg, xxx_.avi, .thm   #appended files
    04_camdire012345                     
          /.mp4,.jpg,.avi                                    #not appended, dir not in lookup,

1 个答案:

答案 0 :(得分:2)

你去了,这将确保摄像机名称结尾的目录不会被附加到文件中。在您尝试重命名文件之前,您需要执行额外的检查,该检查由以下代码片段完成。

prefix[-2:] not in config['append_dir_to_filename']

这只是检查当前正在考虑的目录是否不是上面查找表中定义的摄像机目录(第1级目录)的一部分。完整的代码如下:

import os

cwd = os.getcwd()
config = {
   'append_dir_to_filename' : ('d5', 'a9'),
    'd5': ('nef', 'jpg', 'avi'),
    'a9': ('mp4', 'jpg', 'avi')
}

cameraDirs = [os.path.join(cwd, x) for x in next(os.walk(cwd))[1] if x[-2:] in config['append_dir_to_filename']]
for cameraDir in cameraDirs:
    cameraShortName = cameraDir[-2:]
    for rootDir, _, files in os.walk(cameraDir):
        prefix = os.path.basename(rootDir)
        for file in files:
            if (any(x for x in config[cameraShortName] if file.endswith(x)) and prefix[-2:] not in config['append_dir_to_filename']):
                os.rename(os.path.join(rootDir, file), os.path.join(rootDir, "{}_{}".format(prefix, file)))