一个快速的目录扫描器。
项目描述
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
基准
在下表中,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 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | a21772d1ad699a1409cf243cff56256c0c4c75a3d0088bfe0e58cdd9026788f2 |
|
| MD5 | 5e97edc6e87721f88bb2a1af7c56d7e0 |
|
| 布莱克2-256 | 875420adcb556b9bbbff214c8808bb32061adb5db33f46ad883abe25a8646efb |
scandir_rs -0.9.5-cp310-none-win_amd64.whl 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | ee572315edffc3827acd4ec03ee418b2e45d1cd2fd6f79b237dbd9b6682f1e3a |
|
| MD5 | 596a3e4a748b9625505aff41f05ca1d7 |
|
| 布莱克2-256 | e8ae535b05c12ff8ec912f6a3e0c2c457d57541d0929f2d23f3988beae667415 |
scandir_rs -0.9.5-cp39-none-win_amd64.whl 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 35f44ae5533a5409ddb1c71b70f9744c37c9713c978e4fdbbc20320b80fb1a36 |
|
| MD5 | 80f9ea90fef11f551052dfcec9e70197 |
|
| 布莱克2-256 | 768b608df94454d6cb8c698b6a8b51a026e044c03a3970df31857ff238866bd8 |
scandir_rs -0.9.5-cp38-none-win_amd64.whl 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 3409f223dd952a7f72398f8001af55f19ff58773a0b72d236f0167441db2b469 |
|
| MD5 | 1618942952531fc0d4d2d897eb41086b |
|
| 布莱克2-256 | 634252aaa5e7aebd610da942741c0405064ea9ab897796495aae6597765fc460 |
scandir_rs -0.9.5-cp37-none-win_amd64.whl 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 2c834332b2352e1a351780105ec4649bf3a14572ba5c069750af2adc70746b01 |
|
| MD5 | c2646e8b5862913a1f857e0992a6d699 |
|
| 布莱克2-256 | 483dd0f1317ba91ce4df0f43f8ba53344f1f7f571155ca3d77358f587f4087a8 |
scandir_rs -0.9.5-cp36-none-win_amd64.whl 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | b2b07570c73da80391e8a46705fd9fa4a1e5984a3e4dad8197a10aa4c0e21691 |
|
| MD5 | 85c645957e257b73864ecf6fbbb1044e |
|
| 布莱克2-256 | 2da3359ee1cbd14129d80a729c3209c8aa16bc3246ca2740eb3af28127bf3321 |