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. 一部のPHPインストールで$ _SERVER ['SCRIPT_URI]]などがあるのはなぜですか?
- 3. クリスタルレポートの一部が一部のコンピュータで機能しない
- 4. javascriptがプロジェクトアーキテクチャの一部ではないのはなぜですか?
- 5. メソッドString.indexOfがインタフェースCharSequenceの一部ではないのはなぜですか?
- 6. $ .namespace()がコアjQuery実装の一部ではないのはなぜですか?
- 7. なぜjQueryは一部のリンクでのみ関数を入力しますか?
- 8. 一部のgithubソースでシミュレータが開けないのはなぜですか?
- 9. device.multitaskingSupportedが一部のデバイスで動作しないのはなぜですか?
- 10. CDI注入が一部のモジュールでは機能しないが、他のモジュールでは機能しないのはなぜですか?
- 11. WPFコントロールの一部のプロパティにアクセスできないのはなぜですか?
- 12. 一部のアンカータグが正しくないのはなぜですか?
- 13. 一部のデータがデータベースに保存されないのはなぜですか?
- 14. 一部のIntegerオブジェクトではなぜ== trueですか?
- 15. 一部のWindows 7システムでjava.net.preferIPv4Stack = trueが必要なのはなぜですか?
- 16. Graphics.DrawImageが画像の一部を切り取るのはなぜですか?
- 17. なぜ一部のウェブサイトでポップアップを表示できないのですか?
- 18. テクスチャの一部でこのエラーが発生するのはなぜですか?
- 19. Oracle Sql開発者エラー:一部のモジュールをインストールできない
- 20. 一部のアプリでiOSステータスバーのサイズが変わるのはなぜですか?
- 21. なぜHerokuはRailsエコシステムの一部ですか?
- 22. log10f()は標準的な数学ライブラリの一部ではありませんか?
- 23. なぜ部分関数型のリテラルはありませんか?
- 24. なぜノードに配列の一部をコピーできないのですか?
- 25. 一部のFlattrボタンでエラーが発生するのはなぜですか?
- 26. 一部のデバイスでpingが動作するのはなぜですか?
- 27. 一部のアップロードプラグインでFlashが使用されるのはなぜですか?
- 28. 一部のブラウザで閉じるボタンが揺らぐのはなぜですか?
- 29. アップルLLVMコードの一部であり
- 30. OctoberCMSで一部のモジュールを無効にするとどうなりますか?
ありがとう。 os.pathに文字列以外のオブジェクトを配置することに同意します。別の理由があるかもしれません。 – euphoria83
@ euphoria83:「既存のコードを壊さない」ことは、*非常に*良い理由です。彼らはPython 3のためにそれを動かすことができました。 –