Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Python计算文件的更快方法_Python - Fatal编程技术网

用Python计算文件的更快方法

用Python计算文件的更快方法,python,Python,我想知道一个文件夹中有多少个文件,特别是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个文件)需要很

我想知道一个文件夹中有多少个文件,特别是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上没有内置的文件功能。

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

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


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

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

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


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

+1如果不打乱系统管理员,您将无法执行此操作。这是有意义的。也许有一个windows钩子可以用来获取文件夹中的文件数?如果我在资源管理器中保持目录打开状态,它会不断告诉我文件的数量,并会快速更新,因为所有内容都已缓存。如果它有一种更有效的方法来跟踪这一点,那么最好让操作系统来处理它。+1如果不打乱系统管理员,你不可能做到这一点。这是有道理的。也许有一个windows钩子可以用来获取文件夹中的文件数?如果我在资源管理器中保持目录打开状态,它会不断告诉我文件的数量,并会快速更新,因为所有内容都已缓存。如果它有一种更有效的方法来跟踪,那么最好让操作系统来处理它。