Приведенный ниже код выполняется с помощью API-оболочки win32.file с использованием API FindFirstChangeNotification, доступного в ОС Windows.Вся документация для кода ниже может быть найдена в http://timgolden.me.uk/pywin32-docs/win32file.html. Вы можете иметь более простые способы сделать это, но это самый эффективный.Вся информация доступна на http://timgolden.me.uk/python/win32_how_do_i/watch_directory_for_changes.html
import os
import win32file
import win32con
ACTIONS = {
1: "Created",
2: "Deleted",
3: "Updated",
4: "Renamed from something",
5: "Renamed to something"
}
FILE_LIST_DIRECTORY = 0x0001
path_to_watch = "C:/yourpath"
hDir = win32file.CreateFile(
path_to_watch,
FILE_LIST_DIRECTORY,
win32con.FILE_SHARE_READ | win32con.FILE_SHARE_WRITE | win32con.FILE_SHARE_DELETE,
None,
win32con.OPEN_EXISTING,
win32con.FILE_FLAG_BACKUP_SEMANTICS,
None
)
while 1:
#Right now only directory check is being used and everything else like filecheck is commented
results = win32file.ReadDirectoryChangesW(
hDir,
1024,
True,
# win32con.FILE_NOTIFY_CHANGE_FILE_NAME |
win32con.FILE_NOTIFY_CHANGE_DIR_NAME ,
# win32con.FILE_NOTIFY_CHANGE_ATTRIBUTES |
# win32con.FILE_NOTIFY_CHANGE_SIZE |
# win32con.FILE_NOTIFY_CHANGE_LAST_WRITE |
# win32con.FILE_NOTIFY_CHANGE_SECURITY,
None,
None
)
for action, file in results:
full_filename = os.path.join(path_to_watch, file)
print(full_filename,ACTIONS.get(action, "Unknown"))
. Вы получаете полный путь в full_filename и action в Actions.get (action, "Unknown").Прямо сейчас это наблюдается для обновления, удаления и создания.Вы можете разобраться в действиях вверху кода или внизу, используя if.После чего вы можете получить и распечатать путь .mp4, используя глобальную библиотеку
import glob
print(glob.glob(full_filename,"/*.mp4"))
. Это вернет массив всех путей файлов .mp4 в каталоге