В настоящее время я работаю над проектом, целью которого является создание папки наблюдения в 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
Подводя итог, главная проблема, которую я имею, состоит в том, чтобы контролировать, какая операция с файлом будет выполняться первой или, что еще лучше, какой файл анализируется первым. Я пытался объяснить все как можно более кратко и чисто. Я благодарен за любую подсказку, которая приближает меня к решению, как мне изменить код, чтобы выполнять операции чистым образом.