Skip to main content

一个快速的目录扫描器。

项目描述

scandir-rs

scandir_rs是一个类似的目录迭代模块os.walk(),但具有更多的功能和更高的速度。根据函数调用,它会生成路径列表、按条目类型分组的列表元组或DirEntry包含文件类型和统计信息以及名称的对象。通过在后台并行化迭代,使用scandir_rs速度比(取决于平台、文件系统和文件树结构)快 2-17 倍。os.walk()

如果您只对目录统计感兴趣,可以使用 submodule count

scandir_rs包含以下子模块:

  • count用于确定目录的统计信息。
  • walk用于获取目录条目的名称。
  • scandir用于获取目录条目的详细统计信息。

有关 API,请参阅:

安装

要从源代码构建这个轮子,您需要使用带有通道nightly和工具的Rust maturin

切换到频道nightly

rustup default nightly

安装maturin

cargo install maturin

构建轮(不在 Windows 上):

maturin build --release --strip

在 Windows 上构建轮子:

maturin build --release --strip --no-sdist

maturin将为您系统上安装的所有 Python 版本构建轮子。

为不同的 Python 版本构建和运行测试

为了更容易为几个不同的 Python 版本构建轮子,build_wheels.sh添加了脚本。它为 Python 3.6、3.7、3.8 和 3.9 版本创建了轮子。此外,它pytest在成功创建每个轮子后运行。

为了能够运行脚本pyenv,首先需要安装包括上面提到的所有 Python 解释器版本。

pyenv可以在此处找到如何安装的说明。

例子

获取目录的统计信息:

import scandir_rs as scandir

print(scandir.count.count("~/workspace", extended=True))

相同,但在后台使用类实例异步:

import scandir_rs as scandir

scanner = scandir.count.Count("~/workspace", extended=True))
scanner.start())  # Start background thread pool
...
value = scanner.statistics  # Can be read at any time
...
scanner.stop()  # If you want to cancel the scanner

并使用上下文管理器:

import scandir_rs as scandir

C = scandir.count.Count("~/workspace", extended=True))
with C:
    while C.busy():
        statistics = C.statistics
        # Do something

os.walk()例子:

import scandir_rs as scandir

for root, dirs, files in scandir.walk.Walk("~/workspace"):
    # Do something

带有扩展数据:

import scandir_rs as scandir

for root, dirs, files, symlinks, other, errors in scandir.walk.Walk("~/workspace",
        return_type=scandir.RETURN_TYPE_EXT):
    # Do something

os.scandir()例子:

import scandir_rs as scandir

for path, entry in scandir.scandir.Scandir("~/workspace",
        return_type=scandir.RETURN_TYPE_EXT):
    # entry is a custom DirEntry object

基准

例子/benchmark.py

在下表中,scandir_rs.walk.Walk行返回与 os.walk 相当的结果。

带有 Ryzen 5 2400G 和 SSD 的 Linux

目录~/workspace

  • 22845 个目录
  • 321354 个文件
  • 130 个符号链接
  • 22849 个硬链接
  • 4 台设备
  • 1 管
  • 4.6GB 大小和 5.4GB 磁盘使用量
时间[s] 方法
0.547 os.walk (Python 3.7)
0.132 scandir_rs.count.count
0.142 scandir_rs.count.Count
0.237 scandir_rs.walk.Walk
0.224 scandir_rs.walk.toc
0.242 scandir_rs.walk.collect
0.262 scandir_rs.scandir.entries
0.344 scandir_rs.scandir.entries(元数据=真)
0.336 scandir_rs.scandir.entries(metadata_ext=True)
0.280 scandir_rs.scandir.Scandir.collect
0.262 scandir_rs.scandir.Scandir.iter
0.330 scandir_rs.scandir.Scandir.iter(metadata_ext=True)

在 Linux 上快2 倍。

Windows 10 笔记本电脑 Core i7-4810MQ @ 2.8GHz 笔记本电脑,MTF SSD

目录C:\Windows

  • 84248 个目录
  • 293108 个文件
  • 44.4GB 大小和 45.2GB 磁盘使用量
时间[s] 方法
26.881 os.walk (Python 3.7)
4.094 scandir_rs.count.count
3.654 scandir_rs.count.Count
3.978 scandir_rs.walk.Walk
3.848 scandir_rs.walk.toc
3.777 scandir_rs.walk.collect
3.987 scandir_rs.scandir.entries
3.905 scandir_rs.scandir.entries(元数据=真)
4.062 scandir_rs.scandir.entries(metadata_ext=True)
3.934 scandir_rs.scandir.Scandir.collect
3.981 scandir_rs.scandir.Scandir.iter
3.821 scandir_rs.scandir.Scandir.iter(metadata_ext=True)

在 Windows 10 上速度提升高达6.7 倍。

目录C:\testdir

  • 185563 个目录
  • 1641277 个文件
  • 2696 个符号链接
  • 97GB 大小和 100.5GB 磁盘使用量
时间[s] 方法
151.143 os.walk (Python 3.7)
7.549 scandir_rs.count.count
7.531 scandir_rs.count.Count
8.710 scandir_rs.walk.Walk
8.625 scandir_rs.walk.toc
8.599 scandir_rs.walk.collect
9.014 scandir_rs.scandir.entries
9.208 scandir_rs.scandir.entries(元数据=真)
8.925 scandir_rs.scandir.entries(metadata_ext=True)
9.243 scandir_rs.scandir.Scandir.collect
8.462 scandir_rs.scandir.Scandir.iter
8.380 scandir_rs.scandir.Scandir.iter(metadata_ext=True)

在 Windows 10 上速度提升高达17.4 倍。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

scandir_rs-0.9.5.tar.gz (17.8 kB 查看哈希

已上传 source

内置发行版

scandir_rs-0.9.5-cp310-none-win_amd64.whl (860.3 kB 查看哈希

已上传 cp310

scandir_rs-0.9.5-cp39-none-win_amd64.whl (855.5 kB 查看哈希

已上传 cp39

scandir_rs-0.9.5-cp38-none-win_amd64.whl (853.5 kB 查看哈希

已上传 cp38

scandir_rs-0.9.5-cp37-none-win_amd64.whl (853.4 kB 查看哈希

已上传 cp37

scandir_rs-0.9.5-cp36-none-win_amd64.whl (844.2 kB 查看哈希

已上传 cp36