os.pathmodule は、すべてのパス関連関数のデフォルト モジュールのようです。ただし、listdir()関数は入力としてパスを受け入れますが、osモジュールではなくモジュールの一部です。os.pathなぜこの設計上の決定がなされたのですか?
1 に答える
os個人的には、との区分がos.path少し矛盾していると思います。ドキュメントによるとos.path、特定のプラットフォーム (つまり、OS X、Linux、および BSD では 、posixpathWindows または古い Mac では何か他のものを取得します) のパスで動作するモジュールへのエイリアスである必要があります。
>>> OSをインポート
>>> ヘルプ(os)
モジュール os に関するヘルプ:
名前
os - 使用しているシステムに応じて、Mac、NT、または Posix 用の OS ルーチン。
...
>>> ヘルプ (os.path)
モジュール posixpath に関するヘルプ:
名前
posixpath - Posix パス名に対する一般的な操作.
この関数は、パスlistdir自体では動作しません。代わりに、パスで識別されるディレクトリで動作します。の関数のほとんどは、ファイル システムではなく、実際のパスで動作します。os.path
これは、 の多くの関数os.pathが文字列操作関数であり、 のほとんどの関数osが IO 関数 / syscall であることを意味します。
例:
os.path.join、os.path.dirname、os.path.splitext、は単なる文字列操作関数です。os.listdir、os.getcwd、os.remove、os.statすべてシステムコールであり、実際にファイルシステムに触れます。
反例:
os.pathexists、getmtime、 、およびその他はislink基本的に のラッパーos.statであり、ファイルシステムに触れます。私はそれらを誤って分類していると考えていますが、他の人は同意しないかもしれません.
今日の豆知識:os.pathモジュールはライブラリ ドキュメントのトップ レベルにはありませんが、そのプラットフォームで実際に実行しなくても、任意のプラットフォーム用の のバージョンを実際にインポートできます。これは、のドキュメントに記載されていますos.path。
ただし、常に異なる形式のいずれかであるパスを操作する場合は、個々のモジュールをインポートして使用することもできます。それらはすべて同じインターフェースを持っています:
posixpathUNIX スタイルのパス用ntpathWindows パス用macpath古いスタイルの MacOS パス用os2emxpathOS/2 EMX パス用
で同じことを行うことはできませんos。意味がありません。