Смотрите новые папки, созданные в каталоге, выводя путь новых файлов - PullRequest
0 голосов
/ 19 мая 2019

Цель состоит в том, чтобы посмотреть папку на предмет изменений.И если внутри этой папки наблюдения создается новая подпапка, то получите путь к новым подпапкам и получите в нем содержимое.

Я слышал о библиотеках, таких как watchdog и firstnotication.Но я не могу написать код на Python для Windows Os.Любая помощь приветствуется.

Псевдокод подобен этому,

Watchfolder="C:/watchfolder"
if newFolderCreated inside WatchFolder:
  print snewsubfolder created name #eg:- C:/watchfolder/newfolder
  cd into newsubfolder
  get .mp4 filepath #eg:- C:/watchfolder/newfolder/hello.mp4

1 Ответ

0 голосов
/ 21 мая 2019

Приведенный ниже код выполняется с помощью 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 в каталоге

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...