通过os.scandir()进行多进程目录迭代,并通过tqdm进度条显示进度。
项目描述
IterFilesystem
通过 os.scandir() 进行多进程目录迭代
这个库适合谁使用?
您想处理大量文件和/或几个非常大的文件,并给用户反馈处理所需时间。
特性
进度指示器
启动后立即:通过多进程处理文件,并通过进度条显示进度
使用 tqdm 进度条
基于文件数量和大小估算时间
易于实现针对大文件处理的额外进度条。
通过fnmatch跳过目录和文件名。
工作原理
主进程通过Python多进程在后台启动 统计 进程,并直接开始工作。
有两个后台 统计 进程收集进度条的必要信息
计算所有目录和文件的数量。
累积所有文件的大小。
为什么需要两个进程?
因为仅通过 os.scandir() 收集所有文件系统的项目计数非常快。这是预测处理时间最快的方法。
使用 os.DirEntry.stat() 来获取文件大小会慢得多:它需要另一个系统调用。
好吧,但为什么有两个处理过程呢?
仅使用所有 DirEntry 的总数可能会导致进度指示的估计时间不准确。它取决于实际工作的性质:当处理大文件的正文内容时,了解要处理的总数据量是很好的。
这就是为什么我们使用了两种方法:使用 DirEntry 计数来非常快速地预测处理时间,并使用大小来改进预测时间。
需求
Python 3.6 或更高版本。
tqdm 用于进度条
psutils 用于设置进程优先级
对于开发者:[Pipenv](https://pipenv.readthedocs.io/en/latest/install/#installing-pipenv)。包和虚拟环境管理器
贡献
请:尝试、分支并贡献! ;)
示例
使用示例 CLI,例如。
~$ git clone https://github.com/jedie/IterFilesystem.git ~$ cd IterFilesystem ~/IterFilesystem$ pipenv install ~/IterFilesystem$ pipenv shell (IterFilesystem) ~/IterFilesystem$ print_fs_stats --help (IterFilesystem) ~/IterFilesystem$ pip install -e . ... Successfully installed iterfilesystem ~/IterFilesystem$ $ poetry run print_fs_stats --help usage: print_fs_stats.py [-h] [-v] [--debug] [--path PATH] [--skip_dir_patterns [SKIP_DIR_PATTERNS [SKIP_DIR_PATTERNS ...]]] [--skip_file_patterns [SKIP_FILE_PATTERNS [SKIP_FILE_PATTERNS ...]]] Scan filesystem and print some information optional arguments: -h, --help show this help message and exit -v, --version show program's version number and exit --debug enable DEBUG --path PATH The file path that should be scanned e.g.: "~/foobar/" default is "~" --skip_dir_patterns [SKIP_DIR_PATTERNS [SKIP_DIR_PATTERNS ...]] Directory names to exclude from scan. --skip_file_patterns [SKIP_FILE_PATTERNS [SKIP_FILE_PATTERNS ...]] File names to ignore.
示例输出如下
(IterFilesystem) ~/IterFilesystem$ $ print_fs_stats --path ~/IterFilesystem --skip_dir_patterns ".*" "*.egg-info" --skip_file_patterns ".*" Read/process: '~/IterFilesystem'... Skip directory patterns: * .* * *.egg-info Skip file patterns: * .* Filesystem items..:Read/process: '~/IterFilesystem'... ... Filesystem items..: 100%|█████████████████████████████████████████|135/135 13737.14entries/s [00:00<00:00, 13737.14entries/s] File sizes........: 100%|██████████████████████████████████████████████████████████████|843k/843k [00:00<00:00, 88.5MBytes/s] Average progress..: 100%|███████████████████████████████████████████████████████████████████████████████████████|00:00<00:00 Current File......:, /home/jens/repos/IterFilesystem/Pipfile Processed 135 filesystem items in 0.02 sec SHA515 hash calculated over all file content: 10f9475b21977f5aea1d4657a0e09ad153a594ab30abc2383bf107dbc60c430928596e368ebefab3e78ede61dcc101cb638a845348fe908786cb8754393439ef File count: 109 Total file size: 843.5 KB 6 directories skipped. 6 files skipped.
历史记录
-
TBC
-
使用日志记录并移除“详细模式”
更漂亮的“平均进度”条
修复“当前文件”条:移除逗号
-
遍历排序后的目录条目
更新 CI 流水线
-
修复 human_filesize 的错误
-
stats_helper.abort 总是很有用,可以获取是否使用了 KeyboardInterrupt 的信息
使用 poetry 并更新项目设置
-
修复如果扫描的目录完全为空时的错误
-
通过 psutils 设置 ionice 和 nice 优先级
-
重构 API
清理统计信息和进度条
处理访问错误,例如: 权限被拒绝
修复测试
-
不要为工作器创建单独的进程:只需在主进程中执行工作
目录/文件过滤器现在使用 fnmatch
-
重构
不要使用 persist-queue
从 threading 切换到 multiprocessing
使用多个 tqdm 进度条增强进度显示
-
将持久队列存储在临时目录中
不要捕获 process_path_item 错误,这应该在子类中完成
-
添加了一些项目元文件和测试
设置 CI
修复测试
-
首次发布在 PyPi 上
链接
捐赠
注意:此文件由 README.creole 于 2020-03-16 18:09:30 生成,使用 "python-creole"。
项目详细信息
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源代码分发
构建分发
IterFilesystem-1.4.3.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7a51eb6e7dc365dcf82aac0cbd244189d3dbb4243f54887033ee634565f0ac03 |
|
MD5 | 4ab123434c034157ffc49d9144d5818e |
|
BLAKE2b-256 | fb2a7b3bf7367a0722cfd4b3e0abdb845216944e54184dc628ae15dba7714703 |
IterFilesystem-1.4.3-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 2f6d97369ffce0bff16c17d7d47b1af5d5a8d9c42a14eed7b90247ed9ce65c76 |
|
MD5 | c26732f830d268e7679147b2b02cf33e |
|
BLAKE2b-256 | e25e2d061c014f8edce4383737729ba49a24d0fd4693f56813fe0c1c44d56bdf |