我有一个目录,其中包含超过 300 万个文件(我一开始就应该避免创建这些文件)。使用 os.scandir() 简单地打印出名称,
for f in os.scandir():
print(f)
前约 200,000 个文件的每个项目需要 0.004 秒,但每个项目的时间会大幅减慢至 0.3 秒。再次尝试时,它做了同样的事情 - 前 200,000 个速度很快,然后速度减慢。
等待一个小时后再次运行,这一次对于前 400,000 个文件来说速度很快,但随后以同样的方式变慢。
这些文件都以 1908 年到 1963 年之间的年份开始,因此我尝试使用 bash 命令重新组织这些文件,例如
for i in {1908..1963}; do
> mkdir ../test-folders/$i;
> mv $i* ../test-folders/$i/;
> done
但它最终被挂断了,永远无法到达任何地方......
关于如何重新组织这个巨大的文件夹或更有效地列出目录中的文件有什么建议吗?
最佳答案
听起来最好使用迭代器,一种一次只返回一项而不是将所有内容都放入内存的函数。
glob
库具有函数 iglob
for infile in glob.iglob( os.path.join(rootdir, '*.*') ):
…
关于python - 为什么 os.scandir() 速度变慢/如何重组大目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67994082/