両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン |
python:pathlib [2020/03/31 02:34] – [os.scandir() の実装] ともやん | python:pathlib [2023/05/27 09:00] (現在) – [glob.iglob() の実装] ともやん |
---|
<html> | ====== pathlib, glob.iglob(), os.walk() ====== |
<style> | |
#mincode pre { | |
/*height: 300px;*/ | |
overflow: scroll; | |
overflow-x: hidden; | |
font-size: 10px; | |
} | |
#mincode_long pre { | |
height: 400px; | |
overflow: scroll; | |
overflow-x: hidden; | |
font-size: 10px; | |
} | |
#mintbl table { | |
font-size: 12px; | |
} | |
.dokuwiki .plugin_wrap table { | |
width: auto; | |
} | |
#result pre { | |
/*height: 300px;*/ | |
overflow: scroll; | |
overflow-x: hidden; | |
font-size: 10px; | |
} | |
</style> | |
</html> | |
====== pathlib, glob, os ====== | |
| |
===== os.walk() の実装 ===== | ===== os.walk() の実装 ===== |
**os.walk(top, topdown=True, onerror=None, followlinks=False)** は、内部的には **os.scandir(path='.')** によって処理される。\\ | <html><code>os.walk(top, topdown=True, onerror=None, followlinks=False)</code></html> は、内部的には <html><code>os.scandir(path='.')</code></html> によって処理される。\\ |
| |
===== glob.iglob() の実装 ===== | ===== glob.iglob() の実装 ===== |
**glob.iglob(pathname, *, recursive=False)** は、内部的には **os.scandir(path='.')** によって処理される。\\ | <html><code>glob.iglob(pathname, *, recursive=False)</code></html> は、内部的には <html><code>os.scandir(path='.')</code></html> によって処理される。\\ |
**os.scandir(path='.')** によって取得された内容は **list()** 化されて **fnmatch.filter(names, pattern)** によってフィルター処理される。\\ | <html><code>os.scandir(path='.')</code></html> によって取得された内容は **list()** 化されて <html><code>fnmatch.filter(names, pattern)</code></html> によってフィルター処理される。\\ |
**fnmatch.filter(names, pattern)** の **pattern** は **fnmatch.translate(pattern)** で正規表現に変換してから **re.compile()** される。ここで注意が必要なのは、 **pattern** は **__Unix Shell Style__** のパターンであって正規表現は利用できない。\\ | ここで注意が必要なのは、 **pattern** は **__Unix Shell Style__** のパターンであって正規表現は利用できない。\\ |
| <html><code>fnmatch.filter(names, pattern)</code></html> の **pattern** は <html><code>fnmatch.translate(pattern)</code></html> で正規表現に変換してから <html><code>re.compile()</code></html> される。\\ |
\\ | \\ |
**OK パターン**\\ | **OK パターン**\\ |
</code> | </code> |
| |
<WRAP prewrap 100% #mincode_long> | <WRAP mincode_long> |
<code python python38/Lib/glob.py> | <code python python38/Lib/glob.py> |
"""Filename globbing utility.""" | """Filename globbing utility.""" |
| |
===== os.scandir() の実装 ===== | ===== os.scandir() の実装 ===== |
<WRAP prewrap 100% #mincode_long> | [[https://docs.python.org/3/library/os.html#os.scandir|os — Miscellaneous operating system interfaces — Python 3.8.2 documentation]]\\ |
| <note> |
| Note On Unix-based systems, scandir() uses the system’s opendir() and readdir() functions. On Windows, it uses the Win32 FindFirstFileW and FindNextFileW functions.\\ |
| \\ |
| ノート(翻訳) Unix ベースのシステムでは、scandir() はシステムの opendir() 関数と readdir() 関数を使用します。 Windows では、Win32 FindFirstFileW 関数と FindNextFileW 関数を使用します。 |
| </note> |
| <WRAP mincode_long> |
<code c cpython/Modules/posixmodule.c> | <code c cpython/Modules/posixmodule.c> |
/*[clinic input] | /*[clinic input] |
[[https://stackoverflow.com/questions/24812253/how-can-i-capture-return-value-with-python-timeit-module|How can I capture return value with Python timeit module? - Stack Overflow]]\\ | [[https://stackoverflow.com/questions/24812253/how-can-i-capture-return-value-with-python-timeit-module|How can I capture return value with Python timeit module? - Stack Overflow]]\\ |
[[https://living-sun.com/ja/python/705207-quicker-to-oswalk-or-glob-python-traversal-glob-oswalk-directory-walk.html|os.walkやglobにすばやく - Python、トラバーサル、グロブ、os.walk、ディレクトリウォーク]]\\ | [[https://living-sun.com/ja/python/705207-quicker-to-oswalk-or-glob-python-traversal-glob-oswalk-directory-walk.html|os.walkやglobにすばやく - Python、トラバーサル、グロブ、os.walk、ディレクトリウォーク]]\\ |
| [[https://note.dokeep.jp/post/csharp-fast-enumerate-file/|[C#] 高速でファイルとフォルダを列挙する - ざこノート]]\\ |
| |