2

os.pathmodule は、すべてのパス関連関数のデフォルト モジュールのようです。ただし、listdir()関数は入力としてパスを受け入れますが、osモジュールではなくモジュールの一部です。os.pathなぜこの設計上の決定がなされたのですか?

4

1 に答える 1

12

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.joinos.path.dirnameos.path.splitext、は単なる文字列操作関数です。

  • os.listdiros.getcwdos.removeos.statすべてシステムコールであり、実際にファイルシステムに触れます。

反例:

  • os.pathexistsgetmtime、 、およびその他はislink基本的に のラッパーos.statであり、ファイルシステムに触れます。私はそれらを誤って分類していると考えていますが、他の人は同意しないかもしれません.

今日の豆知識:os.pathモジュールはライブラリ ドキュメントのトップ レベルにはありませんが、そのプラットフォームで実際に実行しなくても、任意のプラットフォーム用の のバージョンを実際にインポートできます。これは、のドキュメントに記載されていますos.path

ただし、常に異なる形式のいずれかであるパスを操作する場合は、個々のモジュールをインポートして使用することもできます。それらはすべて同じインターフェースを持っています:

  • posixpathUNIX スタイルのパス用
  • ntpathWindows パス用
  • macpath古いスタイルの MacOS パス用
  • os2emxpathOS/2 EMX パス用

で同じことを行うことはできませんos。意味がありません。

于 2012-04-23T03:04:58.470 に答える