文字列の連結よりもos.path.joinを使用するのはなぜですか?


85

ここでは全体像を見ることができないと思います。しかし、基本的にos.path.join、通常の文字列連結の代わりに使用する理由がわかりません。

私は主にVBScriptを使用しているので、この関数のポイントがわかりません。


回答:


85

ポータブル

ファイルパス操作を一度書くだけで、多くの異なるプラットフォームで無料で機能します。区切り文字は抽象化されているため、作業が簡単になります。

スマート

そのディレクトリパスの末尾にスラッシュがあるかどうかを心配する必要はもうありませんos.path.join必要に応じて追加します。

晴れ

を使用os.path.joinすると、コードを読んでいる他の人に、ファイルパスを使用していることが明らかになります。人々はコードをすばやくスキャンして、それが本質的にファイルパスであることを発見できます。自分で作成することにした場合、読者がコードの実際の問題を見つけるのを妨げる可能性があります。「うーん、文字列の連結、置換。これはファイルパスですか、それとも何ですか?ああ!なぜ彼は使用しなかったのos.path.joinですか?」:)


3
ありがとう。スマートパーツとクリアパーツは、私が同じ質問をするときに探していた種類の理由です。ポータブルパーツは、ウィンドウのみの「\」ではなく「/」と連結することで簡単に実現できるため、一種の議論の余地があります。
レオガーモンド2016

3
ポイント3にはメリットがありますが、1と2は意味がありません。/ Windowsで動作します。サポートされていないOSを使用していますか?また、末尾の2つのスラッシュは、OS / FSによって正規化されます。使用しないと言っているわけではありませんがos.path.join、使用する場合は、正しい理由で使用してください。os.path.joinの周りにはたくさんの貨物栽培があります。彼らが言うように、「愚かな一貫性は小さな心のホブゴブリンです」。
hraban 2017年

5

'\'を使用するWindowsおよび '/'を使用するUnix(Mac OS Xを含む)で動作します。

posixpathの場合、ここに簡単なコードがあります

In [22]: os.path.join??
Type:       function
String Form:<function join at 0x107c28ed8>
File:       /usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/posixpath.py
Definition: os.path.join(a, *p)
Source:
def join(a, *p):
    """Join two or more pathname components, inserting '/' as needed.
    If any component is an absolute path, all previous path components
    will be discarded."""
    path = a
    for b in p:
        if b.startswith('/'):
            path = b
        elif path == '' or path.endswith('/'):
            path +=  b
        else:
            path += '/' + b
    return path

ウィンドウはありませんが、「\」でも同じである必要があります


5
不思議なことに、/CPythonを使用したWindowsでの作業の使用…
Eric O Lebigot 2012

1
この。パスセパレーターなどを自分で処理するように設計された関数があるのに、なぜ自分で処理しようとするのでしょうか。
ブレア

1
コメントを読んだところ、パスが結合されています。なぜそれを使用するのかわかりません。私が言ったように、全体像がはっきりと見えていないことをお詫びします。
user1905410 2012

@ user1905410 Fine Documentationがカバーしているように、それはそれ以上のことをします。

@ user1905410 Fine Documentationがカバーしているように、それはそれ以上のことをします。

0

OSに依存しません。パスをC:\ Whateverとしてハードコーディングすると、Windowsでのみ機能します。それらをUnix標準「/」でハードコーディングすると、Unixでのみ機能します。os.path.joinは、実行中のオペレーティングシステムを検出し、正しい記号を使用してパスを結合します。


7
If you hardcode them with the Unix standard "/" they will only work on Unix.それは間違いです。「/」は、Windowsおよびlinux / unix / bsd / darwinで問題なく機能します。
レオガーモンド2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.