создание папки * в Python, которая выполняет определенные операции - PullRequest
2 голосов
/ 22 января 2020

В настоящее время я работаю над проектом, целью которого является создание папки наблюдения в Python, которая будет выполнять определенные операции. Я читал о сторожевой библиотеке и сейчас пытаюсь ее реализовать. Мой код основан на: Использование сторожевого таймера python для мониторинга общей папки afp из linux

Вот структура папок и подпапок, над которыми должны выполняться операции. https://imgur.com/mYhZydf

Основная папка watchfolder содержит подпапки subfolX, наблюдаемые рекурсивно. В начале, есть только папка наблюдения, содержащая пустые подпапки. У меня есть другая программа, которая перемещает специальные каталоги VIDX в указанные c подпапки. Теперь три операции выполнены:

settings_extractor() выполнено. Эта функция открывает файл adi.xml и на его основе создает новый файл settings.txt. mediainfo_extractor() выполнено. Эта функция возвращает специфическую c информацию о файле VIDX.mp4. Эта информация затем используется для создания переменной folderName. На основе folderName вся папка VIDX с содержимым (VIDX.mp4, settings.txt, adi. xml) перемещается в другой каталог на основе переменной folderName.

Примерный процесс работы с папкой VID2, перемещаемый в subfol3, находится здесь: https://imgur.com/BOaxHzX

Однако я столкнулся с несколькими проблемами. Я не знаю, как правильно установить порядок операций, чтобы это дало желаемый эффект. Я не могу полностью понять «рекурсивность», потому что программа выполняет некоторые операции с очисткой локальных переменных. Когда я запускаю программу, она сначала анализирует файл *.mp4, создает переменную folderName, однако новое событие вызывает очистку памяти, а затем сценарий не знает, куда следует перемещать файлы.

папка наблюдения basi c код такой же, как и в первой ссылке, однако на 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

Подводя итог, главная проблема, которую я имею, состоит в том, чтобы контролировать, какая операция с файлом будет выполняться первой или, что еще лучше, какой файл анализируется первым. Я пытался объяснить все как можно более кратко и чисто. Я благодарен за любую подсказку, которая приближает меня к решению, как мне изменить код, чтобы выполнять операции чистым образом.

...