Python-2.x: 不使用os.listdir()列出目录

4
使用os.listdir(some_dir),我们可以获取some_dir下的所有文件,但有时,在some_dir下可能会有20M个文件(没有子目录),这将需要很长时间从os.listdir()返回20M个字符串。

(我们认为将20M个文件放在单个目录下不是一个明智的选择,但它确实存在且超出了我的控制...)

是否有其他类似生成器的方法来执行此类列表操作:一旦找到文件,就yield它,我们获取它,然后获取下一个文件。

我尝试过os.walk(),它确实是一个生成器样式的工具,但它也调用os.listdir()来执行列表操作,并且无法很好地处理Unicode文件名(UTF-8名称以及GBK名称)。


1
glob.iglob是一个迭代器... - Benjamin
1个回答

3
如果您使用Python 3.5或更高版本,则可以使用os.scandir()。请参阅文档scandir了解详情。

2
如果你使用的是Python 3.5之前的版本,你可以获取scandir来使用早期版本的Python(它是基于3.5的os.scandir代码开发的)。 - ShadowRanger
@ShadowRanger,非常有帮助的评论。点赞! - Saleem

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接