os.path
module は、すべてのパス関連関数のデフォルト モジュールのようです。ただし、listdir()
関数は入力としてパスを受け入れますが、os
モジュールではなくモジュールの一部です。os.path
なぜこの設計上の決定がなされたのですか?
1 に答える
os
個人的には、との区分がos.path
少し矛盾していると思います。ドキュメントによるとos.path
、特定のプラットフォーム (つまり、OS X、Linux、および BSD では 、posixpath
Windows または古い 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.path
exists
、getmtime
、 、およびその他はislink
基本的に のラッパーos.stat
であり、ファイルシステムに触れます。私はそれらを誤って分類していると考えていますが、他の人は同意しないかもしれません.
今日の豆知識:os.path
モジュールはライブラリ ドキュメントのトップ レベルにはありませんが、そのプラットフォームで実際に実行しなくても、任意のプラットフォーム用の のバージョンを実際にインポートできます。これは、のドキュメントに記載されていますos.path
。
ただし、常に異なる形式のいずれかであるパスを操作する場合は、個々のモジュールをインポートして使用することもできます。それらはすべて同じインターフェースを持っています:
posixpath
UNIX スタイルのパス用ntpath
Windows パス用macpath
古いスタイルの MacOS パス用os2emxpath
OS/2 EMX パス用
で同じことを行うことはできませんos
。意味がありません。