scandir


Namescandir JSON
Version 1.10.0 PyPI version JSON
download
home_pagehttps://github.com/benhoyt/scandir
Summaryscandir, a better directory iterator and faster os.walk()
upload_time2019-03-09 17:58:33
maintainer
docs_urlNone
authorBen Hoyt
requires_python
licenseNew BSD License
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            scandir, a better directory iterator and faster os.walk()
=========================================================

.. image:: https://img.shields.io/pypi/v/scandir.svg
   :target: https://pypi.python.org/pypi/scandir
   :alt: scandir on PyPI (Python Package Index)

.. image:: https://travis-ci.org/benhoyt/scandir.svg?branch=master
   :target: https://travis-ci.org/benhoyt/scandir
   :alt: Travis CI tests (Linux)

.. image:: https://ci.appveyor.com/api/projects/status/github/benhoyt/scandir?branch=master&svg=true
   :target: https://ci.appveyor.com/project/benhoyt/scandir
   :alt: Appveyor tests (Windows)


``scandir()`` is a directory iteration function like ``os.listdir()``,
except that instead of returning a list of bare filenames, it yields
``DirEntry`` objects that include file type and stat information along
with the name. Using ``scandir()`` increases the speed of ``os.walk()``
by 2-20 times (depending on the platform and file system) by avoiding
unnecessary calls to ``os.stat()`` in most cases.


Now included in a Python near you!
----------------------------------

``scandir`` has been included in the Python 3.5 standard library as
``os.scandir()``, and the related performance improvements to
``os.walk()`` have also been included. So if you're lucky enough to be
using Python 3.5 (release date September 13, 2015) you get the benefit
immediately, otherwise just
`download this module from PyPI <https://pypi.python.org/pypi/scandir>`_,
install it with ``pip install scandir``, and then do something like
this in your code:

.. code-block:: python

    # Use the built-in version of scandir/walk if possible, otherwise
    # use the scandir module version
    try:
        from os import scandir, walk
    except ImportError:
        from scandir import scandir, walk

`PEP 471 <https://www.python.org/dev/peps/pep-0471/>`_, which is the
PEP that proposes including ``scandir`` in the Python standard library,
was `accepted <https://mail.python.org/pipermail/python-dev/2014-July/135561.html>`_
in July 2014 by Victor Stinner, the BDFL-delegate for the PEP.

This ``scandir`` module is intended to work on Python 2.7+ and Python
3.4+ (and it has been tested on those versions).


Background
----------

Python's built-in ``os.walk()`` is significantly slower than it needs to be,
because -- in addition to calling ``listdir()`` on each directory -- it calls
``stat()`` on each file to determine whether the filename is a directory or not.
But both ``FindFirstFile`` / ``FindNextFile`` on Windows and ``readdir`` on Linux/OS
X already tell you whether the files returned are directories or not, so
no further ``stat`` system calls are needed. In short, you can reduce the number
of system calls from about 2N to N, where N is the total number of files and
directories in the tree.

In practice, removing all those extra system calls makes ``os.walk()`` about
**7-50 times as fast on Windows, and about 3-10 times as fast on Linux and Mac OS
X.** So we're not talking about micro-optimizations. See more benchmarks
in the "Benchmarks" section below.

Somewhat relatedly, many people have also asked for a version of
``os.listdir()`` that yields filenames as it iterates instead of returning them
as one big list. This improves memory efficiency for iterating very large
directories.

So as well as a faster ``walk()``, scandir adds a new ``scandir()`` function.
They're pretty easy to use, but see "The API" below for the full docs.


Benchmarks
----------

Below are results showing how many times as fast ``scandir.walk()`` is than
``os.walk()`` on various systems, found by running ``benchmark.py`` with no
arguments:

====================   ==============   =============
System version         Python version   Times as fast
====================   ==============   =============
Windows 7 64-bit       2.7.7 64-bit     10.4
Windows 7 64-bit SSD   2.7.7 64-bit     10.3
Windows 7 64-bit NFS   2.7.6 64-bit     36.8
Windows 7 64-bit SSD   3.4.1 64-bit     9.9
Windows 7 64-bit SSD   3.5.0 64-bit     9.5
Ubuntu 14.04 64-bit    2.7.6 64-bit     5.8
Mac OS X 10.9.3        2.7.5 64-bit     3.8
====================   ==============   =============

All of the above tests were done using the fast C version of scandir
(source code in ``_scandir.c``).

Note that the gains are less than the above on smaller directories and greater
on larger directories. This is why ``benchmark.py`` creates a test directory
tree with a standardized size.


The API
-------

walk()
~~~~~~

The API for ``scandir.walk()`` is exactly the same as ``os.walk()``, so just
`read the Python docs <https://docs.python.org/3.5/library/os.html#os.walk>`_.

scandir()
~~~~~~~~~

The full docs for ``scandir()`` and the ``DirEntry`` objects it yields are
available in the `Python documentation here <https://docs.python.org/3.5/library/os.html#os.scandir>`_. 
But below is a brief summary as well.

    scandir(path='.') -> iterator of DirEntry objects for given path

Like ``listdir``, ``scandir`` calls the operating system's directory
iteration system calls to get the names of the files in the given
``path``, but it's different from ``listdir`` in two ways:

* Instead of returning bare filename strings, it returns lightweight
  ``DirEntry`` objects that hold the filename string and provide
  simple methods that allow access to the additional data the
  operating system may have returned.

* It returns a generator instead of a list, so that ``scandir`` acts
  as a true iterator instead of returning the full list immediately.

``scandir()`` yields a ``DirEntry`` object for each file and
sub-directory in ``path``. Just like ``listdir``, the ``'.'``
and ``'..'`` pseudo-directories are skipped, and the entries are
yielded in system-dependent order. Each ``DirEntry`` object has the
following attributes and methods:

* ``name``: the entry's filename, relative to the scandir ``path``
  argument (corresponds to the return values of ``os.listdir``)

* ``path``: the entry's full path name (not necessarily an absolute
  path) -- the equivalent of ``os.path.join(scandir_path, entry.name)``

* ``is_dir(*, follow_symlinks=True)``: similar to
  ``pathlib.Path.is_dir()``, but the return value is cached on the
  ``DirEntry`` object; doesn't require a system call in most cases;
  don't follow symbolic links if ``follow_symlinks`` is False

* ``is_file(*, follow_symlinks=True)``: similar to
  ``pathlib.Path.is_file()``, but the return value is cached on the
  ``DirEntry`` object; doesn't require a system call in most cases; 
  don't follow symbolic links if ``follow_symlinks`` is False

* ``is_symlink()``: similar to ``pathlib.Path.is_symlink()``, but the
  return value is cached on the ``DirEntry`` object; doesn't require a
  system call in most cases

* ``stat(*, follow_symlinks=True)``: like ``os.stat()``, but the
  return value is cached on the ``DirEntry`` object; does not require a
  system call on Windows (except for symlinks); don't follow symbolic links
  (like ``os.lstat()``) if ``follow_symlinks`` is False

* ``inode()``: return the inode number of the entry; the return value
  is cached on the ``DirEntry`` object

Here's a very simple example of ``scandir()`` showing use of the
``DirEntry.name`` attribute and the ``DirEntry.is_dir()`` method:

.. code-block:: python

    def subdirs(path):
        """Yield directory names not starting with '.' under given path."""
        for entry in os.scandir(path):
            if not entry.name.startswith('.') and entry.is_dir():
                yield entry.name

This ``subdirs()`` function will be significantly faster with scandir
than ``os.listdir()`` and ``os.path.isdir()`` on both Windows and POSIX
systems, especially on medium-sized or large directories.


Further reading
---------------

* `The Python docs for scandir <https://docs.python.org/3.5/library/os.html#os.scandir>`_
* `PEP 471 <https://www.python.org/dev/peps/pep-0471/>`_, the
  (now-accepted) Python Enhancement Proposal that proposed adding
  ``scandir`` to the standard library -- a lot of details here,
  including rejected ideas and previous discussion


Flames, comments, bug reports
-----------------------------

Please send flames, comments, and questions about scandir to Ben Hoyt:

http://benhoyt.com/

File bug reports for the version in the Python 3.5 standard library
`here <https://docs.python.org/3.5/bugs.html>`_, or file bug reports
or feature requests for this module at the GitHub project page:

https://github.com/benhoyt/scandir



            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/benhoyt/scandir",
    "name": "scandir",
    "maintainer": "",
    "docs_url": null,
    "requires_python": "",
    "maintainer_email": "",
    "keywords": "",
    "author": "Ben Hoyt",
    "author_email": "benhoyt@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/df/f5/9c052db7bd54d0cbf1bc0bb6554362bba1012d03e5888950a4f5c5dadc4e/scandir-1.10.0.tar.gz",
    "platform": "",
    "description": "scandir, a better directory iterator and faster os.walk()\r\n=========================================================\r\n\r\n.. image:: https://img.shields.io/pypi/v/scandir.svg\r\n   :target: https://pypi.python.org/pypi/scandir\r\n   :alt: scandir on PyPI (Python Package Index)\r\n\r\n.. image:: https://travis-ci.org/benhoyt/scandir.svg?branch=master\r\n   :target: https://travis-ci.org/benhoyt/scandir\r\n   :alt: Travis CI tests (Linux)\r\n\r\n.. image:: https://ci.appveyor.com/api/projects/status/github/benhoyt/scandir?branch=master&svg=true\r\n   :target: https://ci.appveyor.com/project/benhoyt/scandir\r\n   :alt: Appveyor tests (Windows)\r\n\r\n\r\n``scandir()`` is a directory iteration function like ``os.listdir()``,\r\nexcept that instead of returning a list of bare filenames, it yields\r\n``DirEntry`` objects that include file type and stat information along\r\nwith the name. Using ``scandir()`` increases the speed of ``os.walk()``\r\nby 2-20 times (depending on the platform and file system) by avoiding\r\nunnecessary calls to ``os.stat()`` in most cases.\r\n\r\n\r\nNow included in a Python near you!\r\n----------------------------------\r\n\r\n``scandir`` has been included in the Python 3.5 standard library as\r\n``os.scandir()``, and the related performance improvements to\r\n``os.walk()`` have also been included. So if you're lucky enough to be\r\nusing Python 3.5 (release date September 13, 2015) you get the benefit\r\nimmediately, otherwise just\r\n`download this module from PyPI <https://pypi.python.org/pypi/scandir>`_,\r\ninstall it with ``pip install scandir``, and then do something like\r\nthis in your code:\r\n\r\n.. code-block:: python\r\n\r\n    # Use the built-in version of scandir/walk if possible, otherwise\r\n    # use the scandir module version\r\n    try:\r\n        from os import scandir, walk\r\n    except ImportError:\r\n        from scandir import scandir, walk\r\n\r\n`PEP 471 <https://www.python.org/dev/peps/pep-0471/>`_, which is the\r\nPEP that proposes including ``scandir`` in the Python standard library,\r\nwas `accepted <https://mail.python.org/pipermail/python-dev/2014-July/135561.html>`_\r\nin July 2014 by Victor Stinner, the BDFL-delegate for the PEP.\r\n\r\nThis ``scandir`` module is intended to work on Python 2.7+ and Python\r\n3.4+ (and it has been tested on those versions).\r\n\r\n\r\nBackground\r\n----------\r\n\r\nPython's built-in ``os.walk()`` is significantly slower than it needs to be,\r\nbecause -- in addition to calling ``listdir()`` on each directory -- it calls\r\n``stat()`` on each file to determine whether the filename is a directory or not.\r\nBut both ``FindFirstFile`` / ``FindNextFile`` on Windows and ``readdir`` on Linux/OS\r\nX already tell you whether the files returned are directories or not, so\r\nno further ``stat`` system calls are needed. In short, you can reduce the number\r\nof system calls from about 2N to N, where N is the total number of files and\r\ndirectories in the tree.\r\n\r\nIn practice, removing all those extra system calls makes ``os.walk()`` about\r\n**7-50 times as fast on Windows, and about 3-10 times as fast on Linux and Mac OS\r\nX.** So we're not talking about micro-optimizations. See more benchmarks\r\nin the \"Benchmarks\" section below.\r\n\r\nSomewhat relatedly, many people have also asked for a version of\r\n``os.listdir()`` that yields filenames as it iterates instead of returning them\r\nas one big list. This improves memory efficiency for iterating very large\r\ndirectories.\r\n\r\nSo as well as a faster ``walk()``, scandir adds a new ``scandir()`` function.\r\nThey're pretty easy to use, but see \"The API\" below for the full docs.\r\n\r\n\r\nBenchmarks\r\n----------\r\n\r\nBelow are results showing how many times as fast ``scandir.walk()`` is than\r\n``os.walk()`` on various systems, found by running ``benchmark.py`` with no\r\narguments:\r\n\r\n====================   ==============   =============\r\nSystem version         Python version   Times as fast\r\n====================   ==============   =============\r\nWindows 7 64-bit       2.7.7 64-bit     10.4\r\nWindows 7 64-bit SSD   2.7.7 64-bit     10.3\r\nWindows 7 64-bit NFS   2.7.6 64-bit     36.8\r\nWindows 7 64-bit SSD   3.4.1 64-bit     9.9\r\nWindows 7 64-bit SSD   3.5.0 64-bit     9.5\r\nUbuntu 14.04 64-bit    2.7.6 64-bit     5.8\r\nMac OS X 10.9.3        2.7.5 64-bit     3.8\r\n====================   ==============   =============\r\n\r\nAll of the above tests were done using the fast C version of scandir\r\n(source code in ``_scandir.c``).\r\n\r\nNote that the gains are less than the above on smaller directories and greater\r\non larger directories. This is why ``benchmark.py`` creates a test directory\r\ntree with a standardized size.\r\n\r\n\r\nThe API\r\n-------\r\n\r\nwalk()\r\n~~~~~~\r\n\r\nThe API for ``scandir.walk()`` is exactly the same as ``os.walk()``, so just\r\n`read the Python docs <https://docs.python.org/3.5/library/os.html#os.walk>`_.\r\n\r\nscandir()\r\n~~~~~~~~~\r\n\r\nThe full docs for ``scandir()`` and the ``DirEntry`` objects it yields are\r\navailable in the `Python documentation here <https://docs.python.org/3.5/library/os.html#os.scandir>`_. \r\nBut below is a brief summary as well.\r\n\r\n    scandir(path='.') -> iterator of DirEntry objects for given path\r\n\r\nLike ``listdir``, ``scandir`` calls the operating system's directory\r\niteration system calls to get the names of the files in the given\r\n``path``, but it's different from ``listdir`` in two ways:\r\n\r\n* Instead of returning bare filename strings, it returns lightweight\r\n  ``DirEntry`` objects that hold the filename string and provide\r\n  simple methods that allow access to the additional data the\r\n  operating system may have returned.\r\n\r\n* It returns a generator instead of a list, so that ``scandir`` acts\r\n  as a true iterator instead of returning the full list immediately.\r\n\r\n``scandir()`` yields a ``DirEntry`` object for each file and\r\nsub-directory in ``path``. Just like ``listdir``, the ``'.'``\r\nand ``'..'`` pseudo-directories are skipped, and the entries are\r\nyielded in system-dependent order. Each ``DirEntry`` object has the\r\nfollowing attributes and methods:\r\n\r\n* ``name``: the entry's filename, relative to the scandir ``path``\r\n  argument (corresponds to the return values of ``os.listdir``)\r\n\r\n* ``path``: the entry's full path name (not necessarily an absolute\r\n  path) -- the equivalent of ``os.path.join(scandir_path, entry.name)``\r\n\r\n* ``is_dir(*, follow_symlinks=True)``: similar to\r\n  ``pathlib.Path.is_dir()``, but the return value is cached on the\r\n  ``DirEntry`` object; doesn't require a system call in most cases;\r\n  don't follow symbolic links if ``follow_symlinks`` is False\r\n\r\n* ``is_file(*, follow_symlinks=True)``: similar to\r\n  ``pathlib.Path.is_file()``, but the return value is cached on the\r\n  ``DirEntry`` object; doesn't require a system call in most cases; \r\n  don't follow symbolic links if ``follow_symlinks`` is False\r\n\r\n* ``is_symlink()``: similar to ``pathlib.Path.is_symlink()``, but the\r\n  return value is cached on the ``DirEntry`` object; doesn't require a\r\n  system call in most cases\r\n\r\n* ``stat(*, follow_symlinks=True)``: like ``os.stat()``, but the\r\n  return value is cached on the ``DirEntry`` object; does not require a\r\n  system call on Windows (except for symlinks); don't follow symbolic links\r\n  (like ``os.lstat()``) if ``follow_symlinks`` is False\r\n\r\n* ``inode()``: return the inode number of the entry; the return value\r\n  is cached on the ``DirEntry`` object\r\n\r\nHere's a very simple example of ``scandir()`` showing use of the\r\n``DirEntry.name`` attribute and the ``DirEntry.is_dir()`` method:\r\n\r\n.. code-block:: python\r\n\r\n    def subdirs(path):\r\n        \"\"\"Yield directory names not starting with '.' under given path.\"\"\"\r\n        for entry in os.scandir(path):\r\n            if not entry.name.startswith('.') and entry.is_dir():\r\n                yield entry.name\r\n\r\nThis ``subdirs()`` function will be significantly faster with scandir\r\nthan ``os.listdir()`` and ``os.path.isdir()`` on both Windows and POSIX\r\nsystems, especially on medium-sized or large directories.\r\n\r\n\r\nFurther reading\r\n---------------\r\n\r\n* `The Python docs for scandir <https://docs.python.org/3.5/library/os.html#os.scandir>`_\r\n* `PEP 471 <https://www.python.org/dev/peps/pep-0471/>`_, the\r\n  (now-accepted) Python Enhancement Proposal that proposed adding\r\n  ``scandir`` to the standard library -- a lot of details here,\r\n  including rejected ideas and previous discussion\r\n\r\n\r\nFlames, comments, bug reports\r\n-----------------------------\r\n\r\nPlease send flames, comments, and questions about scandir to Ben Hoyt:\r\n\r\nhttp://benhoyt.com/\r\n\r\nFile bug reports for the version in the Python 3.5 standard library\r\n`here <https://docs.python.org/3.5/bugs.html>`_, or file bug reports\r\nor feature requests for this module at the GitHub project page:\r\n\r\nhttps://github.com/benhoyt/scandir\r\n\r\n\r\n",
    "bugtrack_url": null,
    "license": "New BSD License",
    "summary": "scandir, a better directory iterator and faster os.walk()",
    "version": "1.10.0",
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "c68c43cc3799c79c435d1a236783993b2e04a2c750b4f91ef3630ec442490df5",
                "md5": "ab1698106fc8a94dee536c93d51be79a",
                "sha256": "92c85ac42f41ffdc35b6da57ed991575bdbe69db895507af88b9f499b701c188"
            },
            "downloads": -1,
            "filename": "scandir-1.10.0-cp27-cp27m-win32.whl",
            "has_sig": false,
            "md5_digest": "ab1698106fc8a94dee536c93d51be79a",
            "packagetype": "bdist_wheel",
            "python_version": "cp27",
            "requires_python": null,
            "size": 20479,
            "upload_time": "2019-03-09T17:58:19",
            "upload_time_iso_8601": "2019-03-09T17:58:19.612572Z",
            "url": "https://files.pythonhosted.org/packages/c6/8c/43cc3799c79c435d1a236783993b2e04a2c750b4f91ef3630ec442490df5/scandir-1.10.0-cp27-cp27m-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "f9d06b7b38eaf9964510f5c32aa5aaf9f419864d2e0ebe34274e6cba5689a0c5",
                "md5": "203f49b490e2ec2b2057f03e76985bb2",
                "sha256": "cb925555f43060a1745d0a321cca94bcea927c50114b623d73179189a4e100ac"
            },
            "downloads": -1,
            "filename": "scandir-1.10.0-cp27-cp27m-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "203f49b490e2ec2b2057f03e76985bb2",
            "packagetype": "bdist_wheel",
            "python_version": "cp27",
            "requires_python": null,
            "size": 20919,
            "upload_time": "2019-03-09T17:58:21",
            "upload_time_iso_8601": "2019-03-09T17:58:21.380526Z",
            "url": "https://files.pythonhosted.org/packages/f9/d0/6b7b38eaf9964510f5c32aa5aaf9f419864d2e0ebe34274e6cba5689a0c5/scandir-1.10.0-cp27-cp27m-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "0486417b435bd94a4e0176c10acea5b866a47a045848a346c6930fc846b2f016",
                "md5": "5a5261ebc3309845a08723ce7b605b06",
                "sha256": "2c712840c2e2ee8dfaf36034080108d30060d759c7b73a01a52251cc8989f11f"
            },
            "downloads": -1,
            "filename": "scandir-1.10.0-cp34-cp34m-win32.whl",
            "has_sig": false,
            "md5_digest": "5a5261ebc3309845a08723ce7b605b06",
            "packagetype": "bdist_wheel",
            "python_version": "cp34",
            "requires_python": null,
            "size": 20152,
            "upload_time": "2019-03-09T17:58:22",
            "upload_time_iso_8601": "2019-03-09T17:58:22.790782Z",
            "url": "https://files.pythonhosted.org/packages/04/86/417b435bd94a4e0176c10acea5b866a47a045848a346c6930fc846b2f016/scandir-1.10.0-cp34-cp34m-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "773a7f6111552b4736a08a72c37d6b8852cf77c02042a3124a8806f67008ad45",
                "md5": "b76f7c1c1513a9006b1aef0562712a26",
                "sha256": "2586c94e907d99617887daed6c1d102b5ca28f1085f90446554abf1faf73123e"
            },
            "downloads": -1,
            "filename": "scandir-1.10.0-cp34-cp34m-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "b76f7c1c1513a9006b1aef0562712a26",
            "packagetype": "bdist_wheel",
            "python_version": "cp34",
            "requires_python": null,
            "size": 20497,
            "upload_time": "2019-03-09T17:58:24",
            "upload_time_iso_8601": "2019-03-09T17:58:24.184841Z",
            "url": "https://files.pythonhosted.org/packages/77/3a/7f6111552b4736a08a72c37d6b8852cf77c02042a3124a8806f67008ad45/scandir-1.10.0-cp34-cp34m-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "cda1d5c3e22090ebead6d24abbe0f85641f002db44316c0a422d68d2fa258a8c",
                "md5": "695cc9235f54d915e3b79d470bb35274",
                "sha256": "2b8e3888b11abb2217a32af0766bc06b65cc4a928d8727828ee68af5a967fa6f"
            },
            "downloads": -1,
            "filename": "scandir-1.10.0-cp35-cp35m-win32.whl",
            "has_sig": false,
            "md5_digest": "695cc9235f54d915e3b79d470bb35274",
            "packagetype": "bdist_wheel",
            "python_version": "cp35",
            "requires_python": null,
            "size": 22110,
            "upload_time": "2019-03-09T17:58:25",
            "upload_time_iso_8601": "2019-03-09T17:58:25.490973Z",
            "url": "https://files.pythonhosted.org/packages/cd/a1/d5c3e22090ebead6d24abbe0f85641f002db44316c0a422d68d2fa258a8c/scandir-1.10.0-cp35-cp35m-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "b75dc0dc3933bd79fdca4780f84fffb2291672f3db8f0093c5d2ce629b7cb656",
                "md5": "5468e5503744da4f2064a773667cd9f5",
                "sha256": "8c5922863e44ffc00c5c693190648daa6d15e7c1207ed02d6f46a8dcc2869d32"
            },
            "downloads": -1,
            "filename": "scandir-1.10.0-cp35-cp35m-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "5468e5503744da4f2064a773667cd9f5",
            "packagetype": "bdist_wheel",
            "python_version": "cp35",
            "requires_python": null,
            "size": 22845,
            "upload_time": "2019-03-09T17:58:26",
            "upload_time_iso_8601": "2019-03-09T17:58:26.820588Z",
            "url": "https://files.pythonhosted.org/packages/b7/5d/c0dc3933bd79fdca4780f84fffb2291672f3db8f0093c5d2ce629b7cb656/scandir-1.10.0-cp35-cp35m-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "25c5257e7f38127de5221a57e6afd0eb6ad0a85412c92644bf8265f20085b22a",
                "md5": "5139928bafc36cb763063091697a0f14",
                "sha256": "2ae41f43797ca0c11591c0c35f2f5875fa99f8797cb1a1fd440497ec0ae4b022"
            },
            "downloads": -1,
            "filename": "scandir-1.10.0-cp36-cp36m-win32.whl",
            "has_sig": false,
            "md5_digest": "5139928bafc36cb763063091697a0f14",
            "packagetype": "bdist_wheel",
            "python_version": "cp36",
            "requires_python": null,
            "size": 22111,
            "upload_time": "2019-03-09T17:58:28",
            "upload_time_iso_8601": "2019-03-09T17:58:28.265877Z",
            "url": "https://files.pythonhosted.org/packages/25/c5/257e7f38127de5221a57e6afd0eb6ad0a85412c92644bf8265f20085b22a/scandir-1.10.0-cp36-cp36m-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "a0c38b8244553f4cf8682825e46d264f0bf3b8f7a51c9ba4745c8aa9182da4e5",
                "md5": "50303dbc67562351c895ff31b2f6bba1",
                "sha256": "7d2d7a06a252764061a020407b997dd036f7bd6a175a5ba2b345f0a357f0b3f4"
            },
            "downloads": -1,
            "filename": "scandir-1.10.0-cp36-cp36m-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "50303dbc67562351c895ff31b2f6bba1",
            "packagetype": "bdist_wheel",
            "python_version": "cp36",
            "requires_python": null,
            "size": 22847,
            "upload_time": "2019-03-09T17:58:29",
            "upload_time_iso_8601": "2019-03-09T17:58:29.658885Z",
            "url": "https://files.pythonhosted.org/packages/a0/c3/8b8244553f4cf8682825e46d264f0bf3b8f7a51c9ba4745c8aa9182da4e5/scandir-1.10.0-cp36-cp36m-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "9b474bf2941582c731b0c3a7aee7a3129063fe7dad5382cd662f3766dac619b2",
                "md5": "5dbab653f3373e4a3b6467c508c7c817",
                "sha256": "67f15b6f83e6507fdc6fca22fedf6ef8b334b399ca27c6b568cbfaa82a364173"
            },
            "downloads": -1,
            "filename": "scandir-1.10.0-cp37-cp37m-win32.whl",
            "has_sig": false,
            "md5_digest": "5dbab653f3373e4a3b6467c508c7c817",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": null,
            "size": 22109,
            "upload_time": "2019-03-09T17:58:30",
            "upload_time_iso_8601": "2019-03-09T17:58:30.790863Z",
            "url": "https://files.pythonhosted.org/packages/9b/47/4bf2941582c731b0c3a7aee7a3129063fe7dad5382cd662f3766dac619b2/scandir-1.10.0-cp37-cp37m-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "cb06cee31a831784ae66073fff7df58f823a1f6bc3947dc48a76f877b17eb52b",
                "md5": "46b00959354c0a833473e5d0c82b38d0",
                "sha256": "b24086f2375c4a094a6b51e78b4cf7ca16c721dcee2eddd7aa6494b42d6d519d"
            },
            "downloads": -1,
            "filename": "scandir-1.10.0-cp37-cp37m-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "46b00959354c0a833473e5d0c82b38d0",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": null,
            "size": 22842,
            "upload_time": "2019-03-09T17:58:32",
            "upload_time_iso_8601": "2019-03-09T17:58:32.109312Z",
            "url": "https://files.pythonhosted.org/packages/cb/06/cee31a831784ae66073fff7df58f823a1f6bc3947dc48a76f877b17eb52b/scandir-1.10.0-cp37-cp37m-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "dff59c052db7bd54d0cbf1bc0bb6554362bba1012d03e5888950a4f5c5dadc4e",
                "md5": "f8378f4d9f95a6a78e97ab01aa900c1d",
                "sha256": "4d4631f6062e658e9007ab3149a9b914f3548cb38bfb021c64f39a025ce578ae"
            },
            "downloads": -1,
            "filename": "scandir-1.10.0.tar.gz",
            "has_sig": false,
            "md5_digest": "f8378f4d9f95a6a78e97ab01aa900c1d",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 33311,
            "upload_time": "2019-03-09T17:58:33",
            "upload_time_iso_8601": "2019-03-09T17:58:33.269204Z",
            "url": "https://files.pythonhosted.org/packages/df/f5/9c052db7bd54d0cbf1bc0bb6554362bba1012d03e5888950a4f5c5dadc4e/scandir-1.10.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2019-03-09 17:58:33",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "github_user": "benhoyt",
    "github_project": "scandir",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "scandir"
}
        
Elapsed time: 0.03019s