如何在 Python 中动态列出目录中的(某些)文件?

How to list (certain) files in a directory dynamically in Python?

我正在尝试列出(比方说)目录中的 PDF 文件(到 GUI)。我知道我可以用不同的方式(如下所示)来管理它,但我也希望列表是最新的和动态的。例如,如果有人从目录中删除一个 PDF 文件或将一个 PDF 文件添加到目录中,我希望应用程序立即将文件名删除或添加到列表中,而不进行任何刷新。

你知道有什么方法可以解决这个问题吗?

这是我的一些代码:

import os

pdffiles = [name for name in os.listdir('somedir')
               if name.endswith('.pdf')]

for file in pdffiles:
    print(file)

我在学习进度中

您需要通过 OS 通知目录 and/or 某些文件已更改。

  • 在 Linux 您可以使用 pyinotify
  • 在 OSX 上,您可以使用 MACFSEvents
  • 在 Windows (.Net) 上,您可以尝试与 FileSystemWatcher 交互,但我不知道有任何特定的库。

与平台无关的解决方案是watchdog

将其挂接到您的程序中并非易事,但看门狗的示例很清楚,这意味着不需要轮询。

到目前为止,您的代码看起来不错。如果您想以编程方式执行此操作(避免 pynotify 或信号处理),在您的应用程序中维护目录列表的最简单方法是通过轮询目录。

因此,您的代码可能如下所示:

import os
import time

## run indefinitely
while True:
    ## get the directory listing
    pdffiles = [name for name in os.listdir('somedir')
               if name.endswith('.pdf')]

    ## print the most recent listing
    for file in pdffiles:
        print(file)

    ## wait a little bit before getting the next listing
    ## if you want near instantaneous updates, make the sleep value small.
    time.sleep(1)