scandir.walk() is a better alternative to os.walk()
我想用scandir.walk()替换os.walk()的所有实例。但是,我还想确保所有未来的开发人员都使用scandir.walk()。
这很难强制执行,所以我想知道是否可以覆盖默认的os.walk()功能。
答案 0 :(得分:3)
os.walk
现在是scandir.walk
。引用PEP 471:
作为此提案的一部分, os.walk()也将被修改为使用 scandir()而不是 listdir()和 os.path.isdir()的。
是
现在使用 os.scandir()实现,将速度提高3-5 POSIX系统上的时间和Windows系统上的7-20倍。 [...]此提案的实施由Ben Hoyt(最初的>版本)和Tim Golden(他们使用C扩展>模块帮助很多)编写。它位于benhoyt/scandir的GitHub上。
只需修补它:
>>> import scandir
>>> import os
>>> os.walk
<function walk at 0x7f3c02afc8c0>
>>> scandir.walk
<function walk at 0x7f3c00fe28c0>
>>> os.walk = scandir.walk
>>> os.walk is scandir.walk
True
>>> os.walk('/')
<generator object walk at 0x7f3c02b53500>
,因为
scandir.walk()的API与 os.walk()
完全相同
(来自GitHub page)
答案 1 :(得分:0)
如果您真的想要永久性,那么在Python安装中实际修改os.py
文件可能是值得的。为了避免麻烦,如果你想要恢复,我会在那个文件中推荐这种东西:
def walk(top, topdown=True, onerror=None, followlinks=False):
"""walk function doc string"""
import scandir
return scandir.walk(top, topdown, onerror, followlinks)
我认为这会有效,但我并不完全确定,而且我太妄想搞乱os
模块就是你想要的。希望这有帮助