如何在python中检查文件夹中的新文件

Nad*_*ani 5 python automation schedule

我正在尝试创建一个每 10 分钟执行一次的脚本。每次我必须检查计算机中特定文件夹中是否有新文件,如果有,则有一些函数会在此文件上运行以获得一些值。这些值将写入 excel 文件。问题是每次执行这个函数时,都会再次生成包含所有文件路径的变量,程序会遍历所有文件。我该如何处理这个问题?谢谢

小智 8

from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler

class MyHandler(FileSystemEventHandler):
    def on_any_event(self, event):
        print(event.event_type, event.src_path)

    def on_created(self, event):
        print("on_created", event.src_path)
        print(event.src_path.strip())
        if((event.src_path).strip() == ".\test.xml"):        
            print("Execute your logic here!")

event_handler = MyHandler()
observer = Observer()
observer.schedule(event_handler, path='.', recursive=False)
observer.start()


while True:
    try:
        pass
    except KeyboardInterrupt:
        observer.stop()
Run Code Online (Sandbox Code Playgroud)
  1. pip 安装看门狗
  2. 在任务计划程序中为此脚本创建计划任务并监视将在其中创建文件的文件夹。


小智 5

首先初始化变量:

\n\n
savedSet=set()\nmypath=\xe2\x80\xa6 #YOUR PATH HERE\n
Run Code Online (Sandbox Code Playgroud)\n\n

在每个周期结束时,将一组文件名、创建时间和大小以元组格式保存到另一个变量中。检索文件时,请执行以下操作:

\n\n

- 检索一组文件路径

\n\n
nameSet=set()\nfor file in os.listdir(path):\n    fullpath=os.path.join(mypath, file)\n    if os.path.isfile(fullpath):\n        nameSet.add(file)\n
Run Code Online (Sandbox Code Playgroud)\n\n

-创建元组

\n\n
retrievedSet=set()\nfor name in nameSet:\n    stat=os.stat(os.path.join(mypath, name))\n    time=ST_CTIME\n    #size=stat.ST_SIZE If you add this, you will be able to detect file size changes as well.\n    #Also consider using ST_MTIME to detect last time modified\n    retrievedSet.add((name,time))\n
Run Code Online (Sandbox Code Playgroud)\n\n

-将设置与保存的设置进行比较以查找新文件

\n\n
newSet=retrievedSet-savedSet\n
Run Code Online (Sandbox Code Playgroud)\n\n

- 将设置与保存的设置进行比较以查找已删除的文件

\n\n
deletedSet=savedSet-retrievedSet\n
Run Code Online (Sandbox Code Playgroud)\n\n

- 在名称来自 newSet 的文件上运行函数\n-更新保存的集

\n\n
savedSet=newSet\n
Run Code Online (Sandbox Code Playgroud)\n