快速目录扫描程序。
scandir-rs的Python项目详细描述
scandir-rs
scandir_rs
是与os.walk()
类似的目录迭代模块,但具有更多的特性和更高的速度。取决于函数调用
它生成一个路径列表、按条目类型分组的列表元组或DirEntry
对象,其中包括文件类型和状态信息
带着名字。使用scandir_rs
大约是2-17倍,比os.walk()
快2-17倍(取决于平台、文件系统和文件树结构)
通过在后台并行化迭代。在
如果您只对目录统计感兴趣,可以使用子模块count
。在
scandir_rs
包含以下子模块:
count
用于确定目录的统计信息。在walk
用于获取目录项的名称。在scandir
获取目录项的详细统计信息。在
有关API,请参见:
- 子模块
count
doc/count.md - 子模块
walk
doc/walk.md - 子模块
scandir
doc/scandir.md
安装
为了从源代码构建这个轮子,您需要使用Rust和工具nightly
和工具maturin
。在
切换到频道nightly
:
rustup default nightly
安装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
的说明可以在here找到。在
示例
获取目录的统计信息:
importscandir_rsasscandirprint(scandir.count.count("~/workspace",extended=True))
相同,但在后台使用类实例异步:
importscandir_rsasscandirscanner=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
使用上下文管理器:
importscandir_rsasscandirC=scandir.count.Count("~/workspace",extended=True))withC:whileC.busy():statistics=C.statistics# Do something
{cd3}示例:
importscandir_rsasscandirforroot,dirs,filesinscandir.walk.Walk("~/workspace"):# Do something
使用扩展数据:
importscandir_rsasscandirforroot,dirs,files,symlinks,other,errorsinscandir.walk.Walk("~/workspace",return_type=scandir.RETURN_TYPE_EXT):# Do something
os.scandir()
示例:
importscandir_rsasscandirforpath,entryinscandir.scandir.Scandir("~/workspace",return_type=scandir.RETURN_TYPE_EXT):# entry is a custom DirEntry object
基准
下表中scandir行_步行街返回可比 结果到手术室步行. 在
Linux,Ryzen 5 2400G和SSD
目录/usr,其中
- 83790个目录
- 671847个文件
- 48480个符号链接
- 1278个硬链接
- 0个设备
- 0个管道
- 30.3GB大小和31.9GB磁盘使用率
Time [s] | Method |
---|---|
5.319 | os.walk (Python 3.8) |
13.351 | os.walk+os.stat (Python 3.8) |
0.918 | scandir_rs.count.count |
1.340 | scandir_rs.count.count(extended=True) |
0.812 | scandir_rs.count.Count |
1.663 | scandir_rs.walk.toc |
1.107 | scandir_rs.walk.Walk (iter) |
1.775 | scandir_rs.walk.Walk (collect) |
2.511 | scandir_rs.scandir.entries (RETURN_TYPE_FAST) |
2.561 | scandir_rs.scandir.entries (RETURN_TYPE_BASE) |
2.496 | scandir_rs.scandir.entries (RETURN_TYPE_EXT) |
2.881 | scandir_rs.scandir.entries (RETURN_TYPE_FULL) |
2.437 | scandir_rs.scandir.entries (iter, RETURN_TYPE_FULL) |
目录linux-5.5.5,其中
- 4391个目录
- 66459个文件
- 35个符号链接
- 13个硬链接
- 0个设备
- 0个管道
- 870.7MB大小和1021.5MB磁盘使用率
在Linux上,速度高达~5倍。在
Windows 10,带笔记本核心i7-4810MQ@2.8GHz笔记本电脑,MTF SSD
目录C:\Windows带
- 130429个目录
- 426588个文件
- 0符号链接
- 53563硬链接
- 0个设备
- 0个管道
- 49.8GB大小和50.9GB磁盘使用率
目录linux-5.5.5,其中
- 4391个目录
- 66459个文件
- 35个符号链接
- 13个硬链接
- 0个设备
- 0个管道
- 870.7MB大小和1021.5MB磁盘使用率
在Windows 10上,速度高达6.7倍。在
- 项目
标签: