Skip to main content

IterFilesystem

Multiprocess directory iteration via os.scandir()

Who’s this Lib for?

You want to process a large number of files and/or a few very big files and give feedback to the user on how long it will take.

Features:

  • Progress indicator:

    • Immediately after start: process files and indication of progress via multiprocess

    • process bars via tqdm

    • Estimated time based on file count and size

  • Easy to implement extra process bar for big file processing.

  • Skip directories and file name via fnmatch.

How it works:

The main process starts statistic processes in background via Python multiprocess and starts directly with the work.

There are two background statistic processes collects information for the process bars:

  • Count up all directories and files.

  • Accumulates the sizes of all files.

Why two processes?

Because collect only the count of all filesystem items via os.scandir() is very fast. This is the fastest way to predict a processing time.

Use os.DirEntry.stat() to get the file size is significantly slower: It requires another system call.

OK, but why two processed?

Use only the total count of all DirEntry may result in bad estimated time Progress indication. It depends on what the actual work is about: When processing the contents of large files, it is good to know how much total data to be processed.

That’s why we used two ways: the DirEntry count to forecast a processing time very quickly and the size to improve the predicted time.

requirements:

  • Python 3.6 or newer.

  • tqdm for process bars

  • psutils for setting process priority

  • For dev.: Pipenv. Packages and virtual environment manager

contribute

Please: try, fork and contribute! ;)

Build Status on travis-ci.org

travis-ci.org/jedie/IterFilesystem

Build Status on appveyor.com

ci.appveyor.com/project/jedie/IterFilesystem

Coverage Status on codecov.io

codecov.io/gh/jedie/IterFilesystem

Coverage Status on coveralls.io

coveralls.io/r/jedie/IterFilesystem

Requirements Status on requires.io

requires.io/github/jedie/IterFilesystem/requirements/

Example

Use example CLI, e.g.:

~$ 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.

example output looks like this:

(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.

History

Donating


Note: this file is generated from README.creole 2020-03-16 18:09:30 with "python-creole"

Metadata

Release files for iterfilesystem 1.4.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for iterfilesystem 1.4.3
File Size Uploaded
IterFilesystem-1.4.3.tar.gz 20.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for iterfilesystem 1.4.3
File Interpreter ABI Platform
IterFilesystem-1.4.3-py3-none-any.whl Python 3 none any Details

Total release size: 44.1 kB

Release files / IterFilesystem-1.4.3.tar.gz

Download URL IterFilesystem-1.4.3.tar.gz
Size 20.5 kB
Tags Source
SHA-256 checksum
How to use checksums
7a51eb6e7dc365dcf82aac0cbd244189d3dbb4243f54887033ee634565f0ac03
BLAKE2b-256 checksum
How to use checksums
fb2a7b3bf7367a0722cfd4b3e0abdb845216944e54184dc628ae15dba7714703
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/39.0.1 requests-toolbelt/0.9.1 tqdm/4.43.0 CPython/3.6.9

Release files / IterFilesystem-1.4.3-py3-none-any.whl

Download URL IterFilesystem-1.4.3-py3-none-any.whl
Size 23.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2f6d97369ffce0bff16c17d7d47b1af5d5a8d9c42a14eed7b90247ed9ce65c76
BLAKE2b-256 checksum
How to use checksums
e25e2d061c014f8edce4383737729ba49a24d0fd4693f56813fe0c1c44d56bdf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/39.0.1 requests-toolbelt/0.9.1 tqdm/4.43.0 CPython/3.6.9

Release history Release notifications | RSS feed

This release

1.4.3 This release

2 release files

1.4.2

2 release files

1.4.1

2 release files

1.4.0

2 release files

1.3.1

3 release files

1.3.0

3 release files

1.2.0

3 release files

1.1.0

3 release files

1.0.0

3 release files

0.2.0

3 release files

0.1.0

3 release files

0.0.1

3 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page