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

时间:2015-06-24 22:03:38

标签: python directory filenames

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

你知道如何管理它吗?

以下是我的一些代码:

import os

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

for file in pdffiles:
    print(file)

我正在学习进步。

2 个答案:

答案 0 :(得分:0)

您需要通过操作系统通知目录和/或某些文件已更改。

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

独立于平台的解决方案是watchdog

将这种方式挂钩到你的程序中并非易事,但看门狗的例子很清楚,这意味着不需要轮询。

答案 1 :(得分:0)

到目前为止,您的代码看起来很不错。如果您想以编程方式执行此操作(避免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)