Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.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
Python 文件重命名中的抢占查找表规则_Python_Python 3.x - Fatal编程技术网

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

Python 文件重命名中的抢占查找表规则,python,python-3.x,Python,Python 3.x,下面的代码根据查找表规则选择具有父目录名的文件名前缀。它工作得很好 然而,我如何在这段代码中插入一个异常,这样比CWD低一(1)级的任何和所有文件(即=d5,=a9等非递归文件)永远不会附加父目录名?类似于抢占或重写要求追加目录名的查找表if 文件名模式在之前和之后(参见前两个…=d5示例,它们与aaa子目录不同): 代码: 现在,这将确保以摄影机名称结尾的目录不会附加到文件中。在尝试重命名文件之前,您需要执行额外的检查,这是由下面的代码片段完成的 prefix[-2:] not in conf

下面的代码根据查找表规则选择具有父目录名的文件名前缀。它工作得很好

然而,我如何在这段代码中插入一个异常,这样比CWD低一(1)级的任何和所有文件(即
=d5
=a9
等非递归文件)永远不会附加父目录名?类似于抢占或重写要求追加目录名的查找表if

文件名模式之前和之后(参见前两个…
=d5
示例,它们与
aaa
子目录不同):

代码:


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

prefix[-2:] not in config['append_dir_to_filename']
这只是检查正在考虑的当前目录是否不是上面查找表中定义的摄影机目录(第一级目录)的一部分。完整代码如下所示:

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)))

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

prefix[-2:] not in config['append_dir_to_filename']
这只是检查正在考虑的当前目录是否不是上面查找表中定义的摄影机目录(第一级目录)的一部分。完整代码如下所示:

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)))

你当然可以评论你的回答,解释OP哪里出了问题,你是如何解决的。这将有助于未来的访问者了解这个问题。只是代码的教育价值有限。谢谢你的解释。@hepretendprogrammer:我把查找表的结构、键和对象放在了一起讨论。谢谢你的帮助!你当然可以评论你的回答,解释OP哪里出了问题,你是如何解决的。这将有助于未来的访问者了解这个问题。只是代码的教育价值有限。谢谢你的解释。@hepretendprogrammer:我把查找表的结构、键和对象放在了一起讨论。谢谢你的帮助!