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.scandir
是 largely because of issues with using os.listdir
on huge directories 创建的,所以我预计 os.listdir
会在您描述的场景中受到影响,其中 os.scandir
应该表现更好,因为它可以处理内存消耗较低的文件夹,因为(通常)通过避免每个条目 stat
调用(例如区分文件和目录),您至少可以从中受益。
我计划获取一个巨大的数据文件夹。该文件夹的总大小约为 2TB
,其中包含大约 200 万个文件。我需要对这些文件进行一些处理(主要是删除其中的 99%)。
由于数据量大,我预计会出现一些问题。特别是,我想知道 Python 是否能够在合理的时间内使用 os.listdir()
正确列出这些文件。
例如,我从经验中知道,在某些情况下,在 Ubuntu 上删除像这样的大文件夹可能会很痛苦。
除非你给的那几百万个文件已经是大文件夹的形式了,否则你复制的时候很容易把它们分开,比如用文件的前几个字符作为文件夹名,例如:
abcoweowiejr.jpg goes to abc/ folder
012574034539.jpg goes to 012/ folder
等等...这样您就不必阅读包含数百万个文件的文件夹。
os.scandir
是 largely because of issues with using os.listdir
on huge directories 创建的,所以我预计 os.listdir
会在您描述的场景中受到影响,其中 os.scandir
应该表现更好,因为它可以处理内存消耗较低的文件夹,因为(通常)通过避免每个条目 stat
调用(例如区分文件和目录),您至少可以从中受益。