在一个目录中查找文件总数的有效方法

3
我正在编写一个音乐文件整理器(使用Python2),其中我会读取所有文件的元数据,然后将这些文件放入所需的文件夹中。
现在,我已经准备好了命令行界面,但是这个脚本的反馈方式是显示“它正在处理哪个文件”。
如果目录中有5000个mp3文件,则应该提供某种形式的反馈。
所以,我想知道最有效的方法来查找目录中可用的mp3总数(递归扫描所有随后的目录)。
我的想法是跟踪处理的总文件数并根据此显示进度条。如果有更好的方法(性能方面),请随意指导。
我希望我的应用程序不具有任何平台相关的代码。如果坚持这个想法会有严重的性能损失,请为Linux提供建议。

顺便提一下,在我的Python脚本中,我正在使用os.walk遍历所有文件并进行处理。 - shadyabhi
2个回答

2
很抱歉地说,没有比递归查找文件更有效的方法(至少在平台(或文件系统)上是这样)。如果文件系统能够帮助您,它会尽力而为,而您无法为其提供任何帮助。不能不进行递归扫描的原因是文件系统的设计方式。目录可以被视为一个文件,并且它包含了所有它所包含的文件的列表。要在子目录中查找某些内容,您必须首先打开目录,然后打开子目录并搜索其中的内容。

当然可以,但是你应该过滤一下以确保它们是mp3文件吗? - nulvinge
好的,我一定会做到。我只是在谈论框架。 - shadyabhi

1

@shadyabhi: 如果你有许多子目录,也许你可以通过使用os.listdir和multiprocessing.Process来加速递归到每个文件夹的过程。


每个目录最多不超过20个文件。因此,我认为除非我创建4个线程或类似的东西并且它们都协同工作,否则这没有意义。 - shadyabhi
@shadyabhi:由于文件数量很少,不认为子进程或线程值得额外的工作,而且可能比单个线程更慢。 - PabloG

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接