根据多个条件/字典值重命名文件时出现“KeyError”

2024-09-30 12:31:37 发布

您现在位置:Python中文网/ 问答频道 /正文

很难根据多种条件将目录附加到文件名。你知道吗

其目的是将第一个父目录的名称加在仅满足所有3个条件的文件的文件名之前:

  • 文件位于以=camID(例如…=d5)结尾的目录的子目录内,并且
  • ['append_dir_to_filename'] =设置为1,并且
  • 它们是raw_file(扩展)。你知道吗

结果如下:DSCN101_ND52000.nef

之前和之后:

CWD                                      
    01_camdir=d5                    #dirname ends with "camID" 'd5', 'g7', 'a9'
          /aaa/ .nef,.jpg,.avi,.wav
    02_camdir=g7                     
          /bbb/ddd/ .cr2,.jpg,.mp4
    03_camdir=a9                  
          /yyy/kkk/xxx/ .mp4,.jpg,.avi,.thm
    04_camdir                     
          / .mp4,.jpg,.avi

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

代码

给出第1行的in <listcomp>KeyError: 'append_dir_to_filename'错误:

camDirs = [os.path.join(cwd, x) for x in next(os.walk(cwd))[1] if x[-2:] in config['append_dir_to_filename']]
for camDir in camDirs:
        camID = camDir[-2:]
        for rootDir, _, files in os.walk(camDir):
            prefix = os.path.basename(rootDir)
            for file in files:
                if (any(x for x in config[camID] 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)))

表格

#'g7', 'd5' are called "camID"
config = {
    'g7': {},
    'd5': {},
    'so': {},
}
config['g7']['append_dir_to_filename'] = 0          #set to 1, append dir name
config['g7']['raw_file'] = ('cr2', 'jpg', 'mp4')    #files to append

config['d5']['append_dir_to_filename'] = 1          #set to 1, append dir name
config['d5']['raw_file'] = ('nef', 'jpg', 'avi')    #files to append

config['a9']['append_dir_to_filename'] = 1          #set to 0, do not append dir name
config['a9']['raw_file'] = ('mp4', 'jpg', 'avi')    #files to append  

换句话说,从selectcameras(但不是从所有cameras)为select照片和视频文件类型(但不是其他文件类型)附加目录名。要附加哪些文件和哪些相机的信息在表中。你知道吗

例如(对不同相机类型的存储卡中的媒体文件进行排序):如果目录以…=d5(或查找表中的其他内容)结尾,则根据查找表,目录中的所有raw_filenef, jpg, avi)文件名都将附加一级父目录名字就像dirname_origfilename.nef。如果['append_dir_to_filename'] = 0,则不要附加目录名。一个例外:如果文件位于以…=d5(或=g7,或=so结尾的目录中,则不要追加。你知道吗


Tags: toin目录configrawdirfilenamefile

热门问题