Skip to main content
 首页 » 编程设计

python之在 Python 中计算文件的更快方法

2025年05月04日11freeliver54

我想知道一个文件夹中有多少文件(特别是 Windows 上的共享网络文件夹,如果这在这里有所不同的话)。

我现在正在使用这段代码:

include os.path 
def countFiles(path): 
    return len([f for f in os.listdir(path) 
                if os.path.isfile(os.path.join(path, f))]) 

当文件夹中有几个文件时它工作正常,但在有很多文件(比如 4000)的目录中需要很长时间。我经常运行此程序(每约 15 秒添加一次文件),所以速度变慢是很痛苦的。

在我的特殊情况下,我知道没有任何子文件夹,所以我可以跳过 os.path.isfile 检查,但我想保持我的解决方案通用。坦率地说,令我惊讶的是 os.path 上没有内置 # of files 函数。

请您参考如下方法:

为了知道一个文件夹中有多少文件,系统必须枚举每个条目,然后它必须检查一个条目是否是一个文件。没有更快的方法,除非系统为您提供文件系统事件(例如 fsevent 或 eventfd)以在事情发生变化时通知您。

这些操作对于基于磁盘的文件系统来说很慢(几十到几百微秒),在网络驱动器上甚至更慢;您会注意到即使在普通文件浏览器中它们也非常慢。现代操作系统通过积极的缓存来处理缓慢问题,但这有其局限性(尤其是对于网络文件系统,保持缓存新鲜的开销可能超过首先执行操作的成本)。

为了加快速度,您可以缓存您已经检查过的名称的 isfile 结果,前提是它们不会转换为目录。这会为您节省很多 isfile 检查,但会牺牲一点安全性(例如,如果有人删除了一个文件并将其替换为同名文件夹)。