下面的代码选择文件名,每个查找表规则具有父目录名。它完美地运作。
然而,我如何在此代码中插入异常,以及 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,
答案 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)))