观察目录中创建的新文件夹输出新文件的路径

2024-03-28 13:29:57 发布

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

目标是监视文件夹的更改。如果在监视文件夹中创建了新的子文件夹,那么-获取新的子文件夹路径并获取其中的内容

我听说过像看门狗和第一通知这样的图书馆。但是我不能用python为Windows操作系统编写代码。 感谢您的帮助

伪代码是这样的

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

Tags: 代码路径文件夹内容目标if图书馆windows
1条回答
网友
1楼 · 发布于 2024-03-28 13:29:57

下面的代码是使用win32.filewrapper API完成的,该API使用windows操作系统中可用的FindFirstChangeNotification API。 以下代码的所有文档都可以在 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\u filename中获得完整路径,在Actions.get(action,“Unknown”)中获得操作。现在它被监视更新、删除和创建。您可以使用if在代码顶部或底部的操作中进行分类。 之后,可以使用glob库获取并打印.mp4路径

import glob
print(glob.glob(full_filename,"/*.mp4"))

这将返回目录中所有.mp4文件路径的数组

相关问题 更多 >