os.walk() 与 os.scandir()

问题描述 投票:0回答:3

os.scandir 声称是一个更好的目录迭代器,并且比

os.walk()
更快。它成为 Python 3 stdlib 的一部分。在生产环境中工作,从
os.walk()
迁移到
os.scandir()
时需要考虑哪些事项?

python os.walk
3个回答
2
投票

我曾经在Python 2.7中使用过os.scandir()。由于奇怪的 unicode 字符,它一直崩溃。 (

ù ỳ ǹ
等)。切换回 os.walk() ,一切都很好。我建议您测试一下是否有问题。

除此之外,它确实更快,尤其是在 Windows 上。


0
投票

AFAICT,您不会从

os.walk
移动到
os.scandir
。他们做不同的事情。如果您之后需要多次调用
os.scandir
,则可以使用 os.listdir()
 代替 
os.stat()
,并且可以通过避免这些调用来提高性能。此外,
os.scandir
作为迭代器,使用更少的内存。

随着 Python 3.5+ 中接受 PEP 471

os.walk
现在在内部使用
os.scandir
而不是
os.listdir()
,因此您可以获得提到的性能优势。


-2
投票

我对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 及更高版本中可用

© www.soinside.com 2019 - 2024. All rights reserved.