os.path
モジュールは、すべてのパス関連機能のデフォルトモジュールのようです。しかし、listdir()
関数は、os
モジュールの一部であり、入力としてパスを受け入れるとしても、os.path
モジュールではありません。なぜこの意思決定がなされたのでしょうか?なぜlistdir()関数がosモジュールの一部であり、os.pathの一部ではないのですか?
1
A
答えて
11
私は個人的にはos
とos.path
の間に少し矛盾があります。ドキュメントによると、os.path
は、特定のプラットフォーム(つまり、OS X、Linux、およびBSDの場合はposixpath
、Windowsまたは古代のMacの場合は別のものが得られる)上のパスで動作するモジュールの別名にする必要があります)。
>>> import os >>> help(os) Help on module os: NAME os - OS routines for Mac, NT, or Posix depending on what system we're on. ... >>> help(os.path) Help on module posixpath: NAME posixpath - Common operations on Posix pathnames.
listdir
機能ではなく、それはパスで識別されるディレクトリ上で動作し、パス自体には動作しません。 os.path
の関数のほとんどは、実際のパスで動作し、ではなく、ファイルシステム上のです。
これは、os.path
の多くの関数が文字列操作関数であり、os
のほとんどの関数がIO関数/ syscallsであることを意味します。
例:
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
のバージョンをインポートすることができます。これは、しかし、あなたはまた、インポートして、異なる形式のいずれかで常にパスを操作したい場合は、個々のモジュールを使用することができます
、
UNIX形式のパスのためのos.path
のドキュメントに記載されています。彼らは皆、同じインタフェースがあります
- 、Windowsのパスの
posixpath
- 古いスタイルのための
ntpath
macpath
MacOSのパスをOS/2 EMXパスのos2emxpath
os
と同じことをすることはできません。 nse。
関連する問題
- 1. 一部のスイッチにアップリンクポートがあるのはなぜですか?
- 2. なぜスカラの一部の関数を渡す必要がありますか?
- 3. パンダタイムスタンプのコンポーネント - 一部はプロパティであり、一部はメソッドです。
- 4. 一部のPHPインストールで$ _SERVER ['SCRIPT_URI]]などがあるのはなぜですか?
- 5. 一部のクラスではインスタンス化が必要なものがいくつかあります。なぜですか?
- 6. $ .namespace()がコアjQuery実装の一部ではないのはなぜですか?
- 7. javascriptがプロジェクトアーキテクチャの一部ではないのはなぜですか?
- 8. メソッドString.indexOfがインタフェースCharSequenceの一部ではないのはなぜですか?
- 9. UIImageがFoundationフレームワークの一部ではないのはなぜですか?
- 10. constが関数シグネチャの一部になることがあるのはなぜですか?
- 11. クリスタルレポートの一部が一部のコンピュータで機能しない
- 12. device.multitaskingSupportedが一部のデバイスで動作しないのはなぜですか?
- 13. 一部のデバイスでnotifyDataSetChangedが動作しないのはなぜですか?
- 14. 一部のgithubソースでシミュレータが開けないのはなぜですか?
- 15. 一般的なデータベースの一部のテーブルでプライマリキーが定義されていないのはなぜですか?
- 16. なぜjQueryは一部のリンクでのみ関数を入力しますか?
- 17. なぜconsole.log()とalert()関数が実際にJavascriptの一部ではないのですか?
- 18. haddockがベースの一部のモジュールでHTMLを生成しないのはなぜですか?
- 19. Bash関数の一部がLinux上で実行されない
- 20. 一部の画像でgetimagesize()関数が機能しない
- 21. Angular2:コンポーネントはモジュールの一部ではありません
- 22. AddArgumentsの一部のパラメータが機能しないのはなぜですか?
- 23. Angular JSのデータバインディングの一部が機能しないのはなぜですか?
- 24. WPFコントロールの一部のプロパティにアクセスできないのはなぜですか?
- 25. 一部のIntegerオブジェクトではなぜ== trueですか?
- 26. 一部のアンカータグが正しくないのはなぜですか?
- 27. 一部のデータがデータベースに保存されないのはなぜですか?
- 28. CDI注入が一部のモジュールでは機能しないが、他のモジュールでは機能しないのはなぜですか?
- 29. 一部のWindows 7システムでjava.net.preferIPv4Stack = trueが必要なのはなぜですか?
- 30. なぜJsoupは一部のURLに接続できないのですか?
ありがとう。 os.pathに文字列以外のオブジェクトを配置することに同意します。別の理由があるかもしれません。 – euphoria83
@ euphoria83:「既存のコードを壊さない」ことは、*非常に*良い理由です。彼らはPython 3のためにそれを動かすことができました。 –