os.listdir() 如何处理非常大的文件夹?

How does os.listdir() performs on very large folders?

我计划获取一个巨大的数据文件夹。该文件夹的总大小约为 2TB,其中包含大约 200 万个文件。我需要对这些文件进行一些处理(主要是删除其中的 99%)。

由于数据量大,我预计会出现一些问题。特别是,我想知道 Python 是否能够在合理的时间内使用 os.listdir() 正确列出这些文件。

例如,我从经验中知道,在某些情况下,在 Ubuntu 上删除像这样的大文件夹可能会很痛苦。

除非你给的那几百万个文件已经是大文件夹的形式了,否则你复制的时候很容易把它们分开,比如用文件的前几个字符作为文件夹名,例如:

abcoweowiejr.jpg goes to abc/ folder
012574034539.jpg goes to 012/ folder

等等...这样您就不必阅读包含数百万个文件的文件夹。

os.scandirlargely because of issues with using os.listdir on huge directories 创建的,所以我预计 os.listdir 会在您描述的场景中受到影响,其中 os.scandir 应该表现更好,因为它可以处理内存消耗较低的文件夹,因为(通常)通过避免每个条目 stat 调用(例如区分文件和目录),您至少可以从中受益。