pathlib 比 os.walk() 需要更多时间递归遍历目录

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

我正在尝试确定

pathlib
模块是否比目录遍历方面的
os
有所改进。令我惊讶的是,与
os
相比,我从
pathlib
模块获得了更好的读数。这是我没想到的。是否因为
os
模块足够愚蠢,不关心路径字符串是否代表文件、目录或链接等?那么速度与更好的控制?

也许我没有使用

pathlib
应该使用的方式。

这是代码:

import os
import sys
import pathlib
import time
import pdb

def TraverseDir(path=None, oswalk=None):

    if path is None:
        path = pathlib.Path().home()
    
    oswalk = True if (oswalk == 'True') else False

    if (oswalk == True):
        method = "oswalk"
    else:
        method = "Pathlib"

    start = time.time()

    count = 0
    with open("filelist" + '_' + method, "w+") as file:
        if (oswalk):
            for ( _, _,fnames) in os.walk(path):
                for fname in fnames:
                    count += 1
                    file.write(fname + '\n')
                    continue
        else:
            for Fullpath in pathlib.Path(path).rglob("*"):
                if Fullpath.is_file():
                    count += 1
                    file.write(str(Fullpath.name) + '\n')
                    continue

    end = time.time()
    print(f"Took {end - start} seconds with {method}, counted {count} files")

if __name__ == '__main__':
    try:
        path = sys.argv[1]
        if ((path.lower() == 'true') or (path.lower() == 'false')):
            oswalk = path
            path = None
        else:
            oswalk = sys.argv[2]
    except IndexError:
        path = None
        oswalk = None
    TraverseDir(path, oswalk)

这是

pathlib
用于遍历目录树的最佳方式吗?请阐明这一点。

更新1:现在我知道

pathlib
不是
os
的竞争对手(可以这么说),而是一种恭维,将在需要时将它们混合在一起。

python python-3.x pathlib
2个回答
0
投票

应该显而易见的部分是,pathlib 正在创建路径对象,这需要时间,而 os.walk 只返回字符串。


0
投票

创建

Path
对象很慢,但在您的情况下让它变慢的是
Fullpath.is_file()

如果运行分析,在文件夹中递归迭代文件时,仅此部分就需要花费 60% 以上的时间。

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