如何在 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)
我正在尝试列出(比方说)目录中的 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)