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

2024-06-16 11:50:33 发布

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

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

下面是必须对其执行操作的文件夹和子文件夹的结构。 https://imgur.com/mYhZydf

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

settings_extractor()被执行。此函数用于打开文件adi.xml,并在此基础上创建新文件settings.txtmediainfo_extractor()被执行。此函数返回有关VIDX.mp4文件的特定信息。然后使用此信息创建folderName变量。 基于folderName将包含内容(VIDX.mp4、settings.txt、adi.xml)的整个文件夹VIDX基于folderName变量移动到另一个目录

将文件夹VID2移动到subfol3的示例性过程如下: https://imgur.com/BOaxHzX

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

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

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

    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

总而言之,我面临的主要问题是控制首先对文件执行哪个操作,或者更好地控制首先分析哪个文件。 我尽量简明扼要地解释一切。我非常感谢任何能让我更接近解决方案的提示,我应该如何修改代码以干净的方式执行操作


Tags: 文件path代码httpssrc文件夹comevent