为什么从目录加载文件名需要这么长时间?

时间:2015-03-11 12:01:45

标签: python file

我需要从包含163.360文件的文件夹中将1460个文件加载到列表中。

我使用以下python代码来执行此操作:

import os
import glob

Directory = 'C:\\Users\\Nicolai\\Desktop\\sealev\\dkss_all'
stationName = '20002'
filenames = glob.glob("dkss."+stationName+"*")

到目前为止,这一直运行正常,但今天当我启动我的机器并运行代码时,它只是停留在最后一行。我试图重新启动,它没有帮助,最后我让它运行,去午休,回来后它就完成了。花了45分钟。现在,当我运行它需要不到一秒钟,发生了什么?这是缓存吗?如何防止再次等待45分钟?任何解释都将非常感激。

2 个答案:

答案 0 :(得分:3)

是的,这是一个缓存的事情。您的硬盘是一个缓慢的外围设备,从它读取163.360文件名可能需要一些时间。是的,您的操作系统会为您缓存这类信息。 Python必须等待加载该信息才能过滤掉匹配的文件名。

在操作系统决定使用内存缓存目录信息以获取其他内容之前,您不必再等待所有时间,或者重新启动计算机。由于您重新启动了计算机,因此不再缓存信息。

答案 1 :(得分:2)

假设同一目录上的ls速度一样慢,您无法减少目录列表操作所需的总时间。文件系统有时很慢(这就是为什么操作系统 缓存目录条目)。

然而,实际上你可以在你的Python代码中做的事情:你可以在文件名进入时操作,而不是等待整个结果在代码的其余部分之前完成开始。不幸的是,这是标准库中不存在的功能,这意味着您需要调用C函数。

有关此实现,请参阅Ben Hoyt's scandir module。另请参阅this StackOverflow question, describing the problem

使用scandir可能如下所示:

prefix = 'dkss.%s.' % stationName
for direntry in scandir(path='.'):
  if direntry.name.startswith(prefix):
    pass # do whatever work you want with this file here.