os.scandir 声称是一个更好的目录迭代器,并且比
os.walk()
更快。它成为 Python 3 stdlib 的一部分。在生产环境中工作,从 os.walk()
迁移到 os.scandir()
时需要考虑哪些事项?
我曾经在Python 2.7中使用过os.scandir()。由于奇怪的 unicode 字符,它一直崩溃。 (
ù ỳ ǹ
等)。切换回 os.walk() ,一切都很好。我建议您测试一下是否有问题。
除此之外,它确实更快,尤其是在 Windows 上。
os.walk
移动到 os.scandir
。他们做不同的事情。如果您之后需要多次调用 os.scandir
,则可以使用 os.listdir()
代替
os.stat()
,并且可以通过避免这些调用来提高性能。此外,os.scandir
作为迭代器,使用更少的内存。
随着 Python 3.5+ 中接受 PEP 471,
os.walk
现在在内部使用 os.scandir
而不是 os.listdir()
,因此您可以获得提到的性能优势。
我对Python不是很熟悉,但最近我必须编写一些Python 2.x脚本,使用os.walk()来枚举大量文件。最后我在 C# 上编写了虚拟文件枚举。 代码:
string dirPath = @"d:\";
DirectoryInfo di = new DirectoryInfo (dirPath)
var fi = di.EnumerateFiles ("*", SearchOption.AllDirectories);
运行 dummy enumerate 并且 python 变得更快:) 注意:这仅在 .NET 4.0 及更高版本中可用