Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.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中创建执行某些操作的watchfolder_Python_Recursion_Watchdog_Python Watchdog - Fatal编程技术网

在Python中创建执行某些操作的watchfolder

在Python中创建执行某些操作的watchfolder,python,recursion,watchdog,python-watchdog,Python,Recursion,Watchdog,Python Watchdog,目前我正在从事一个项目,该项目的目标是在Python中创建watchfolder来执行某些操作。我读过关于watchdog库的文章,现在我正在尝试实现它。我的代码基于: 下面是必须对其执行操作的文件夹和子文件夹的结构。 主文件夹watchfolder包含递归观察到的子文件夹subfolders。 开始时,只有包含空子文件夹的watchfolder。 我有另一个程序,移动特殊的目录VIDX到特定的子文件夹。 现在,完成了三个操作: 设置\u提取器已执行。此函数用于打开文件adi.xml,并在此基

目前我正在从事一个项目,该项目的目标是在Python中创建watchfolder来执行某些操作。我读过关于watchdog库的文章,现在我正在尝试实现它。我的代码基于:

下面是必须对其执行操作的文件夹和子文件夹的结构。

主文件夹watchfolder包含递归观察到的子文件夹subfolders。 开始时,只有包含空子文件夹的watchfolder。 我有另一个程序,移动特殊的目录VIDX到特定的子文件夹。 现在,完成了三个操作:

设置\u提取器已执行。此函数用于打开文件adi.xml,并在此基础上创建新的文件settings.txt。 已执行mediainfo_提取器。此函数用于返回有关VIDX.mp4文件的特定信息。然后使用此信息创建folderName变量。 基于folderName,将内容为VIDX.mp4、settings.txt、adi.xml的整个文件夹VIDX移动到另一个基于folderName变量的目录中

文件夹VID2移动到子文件夹3的示例过程如下:

然而,我遇到了一些问题。我不知道该如何正确设置操作顺序,以获得理想的效果。我不能完全理解“递归性”,因为程序正在执行一些清除局部变量的操作。当我运行程序时,它首先分析*.mp4文件,创建folderName变量,然而新事件触发内存清除,然后脚本不知道应该将文件移动到哪里

基本watchfolder代码与第一个链接中的代码相同,但pastebin上有以下版本:

以下是我负责操作的代码:

    if(event.event_type == 'created'):
        filename = path_leaf(event.src_path)            
        extension = os.path.splitext(event.src_path)[-1].lower()

        if filename == "adi.xml":
            adi_to_settings.settings_extractor(event.src_path)
            shouldMove = True

        if extension == ".mp4":
            #<PART OF CODE RESPONSIBLE FOR CREATING folderName>
            folderName = folderName.upper()
            folderThatWillBeMoved = str(Path(event.src_path).parent)


        if(len(os.listdir(r"C:\Users\user\WFS\watchfolder\subfol3\{}".format("folderThatWilLBeMoved))) >= 3 & shouldMove == True):
            moveAllDirsAndFilesinDir(r'C:\Users\user\WFS\watchfolder\{}'.format("folderThatWillBeMoved"),r'C:\Users\user\WFS\tempfolder\{}'.format(folderName))
            shouldMove = False
总而言之,我面临的主要问题是控制首先对文件执行哪个操作,或者更好地控制首先分析哪个文件。
我尽量简明扼要地解释一切。我非常感谢任何能让我更接近解决方案的提示,我应该如何修改代码以便以干净的方式执行操作。

您提到的一个问题是:“因为程序正在执行一些清除局部变量的操作”。提供两种方法来维护变量,最简单的方法是使用全局变量。作为我评论的后续内容,假设您的处理程序是一个类,则可以使用类变量,在本例中,这比全局变量更好。