4

ご存知のように、ウィンドウはとの両方をセパレータとして受け入れ"\"ます"/"。しかし、Pythonでは、"\"が使用されます。たとえば、callos.path.join("foo","bar")'foo\\bar'返されます。厄介なのは、エスケープ文字があるため、パス文字列をコピーしてエクスプローラーのロケーションバーに貼り付けることはできないということです。

Pythonをデフォルトの区切り文字として使用する方法はある"/"のでしょうか。os.path.sepとos.sepの値をに変更してみました"/"が、os.path.joinそれでも。を使用しています"\\"

正しい方法は何ですか?

PS:

PythonがWindowsのデフォルトの区切り文字として「\」を使用している理由がわかりません。古いバージョンのWindowsは「/」をサポートしていない可能性がありますか?

4

5 に答える 5

10

質問にできるだけ簡単に答えるには、os.pathの代わりにposixpathを使用してください。

したがって、代わりに:

from os.path import join
join('foo', 'bar')
# will give you either 'foo/bar' or 'foo\\bar' depending on your OS

使用する:

from posixpath import join
join('foo', 'bar')
# will always give you 'foo/bar'
于 2014-06-06T01:53:00.030 に答える
7

PythonがOSを検出する方法がすべてです。

# in os.py
if 'posix' in _names:
    ...
    import posixpath as path   

elif 'nt' in _names:
    ...
    import ntpath as path

したがって、Windowsではntpathモジュールがロードされます。ntpath.pyおよびモジュールを確認すると、もう少し複雑であることにposixpath.py気付くでしょう。これは、前述の理由によるものでもあります。Windowsはパス区切り文字として理解します。ntpath.join()/

結論:Windowsで使用できますがposixpath.join()(引数が形式である限りPOSIX)、使用することはお勧めしません。

于 2012-08-23T06:56:03.750 に答える
2

カスタム表示機能を定義してみませんか?

例えば

def display_path(path):
    return path.replace("\\", "/")

str.joinそして、の代わりに使用したい場合os.path.joinは、これを行うことができます(str.join単一のリストをos.path.join期待し、期待します*args):

join = lambda *args: "/".join(args)

おそらく、Pythonにすべてを正規化させてから、次のように置き換える方がよいでしょう。

join = lambda *args: os.path.join(*args).replace("\\", "/")

上記の唯一の問題は、ファイルパスにスペースがある場合のposixにある可能性があります。

次にif、utilsファイルの先頭にステートメントを配置し、Windowsでない場合は、それぞれno-opおよびos.path.joinとして定義できdisplay_pathますjoin

于 2012-08-23T06:58:08.803 に答える
1

これを行うことはお勧めしません。

Windowsは/パス区切り文字としてスラッシュも受け入れますが、コンテキストによっては異なる意味を持つことに注意してください。

cd次に、を使用して相対パスとして扱われます。

コマンドライン:

c:\ Users \ YourUser> cd / FooBar
c:\ FooBar

ここでは/、ドライブ文字に置き換えます。


また、文字列をコピーしても問題はまったくありませんprint。文字列を選択すると、文字列が希望どおりに表示されるためです。

Pythonインタープリター:

>>> import os
>>> print os.path.join( "c:\"、 "foo"、 "bar")
c:\ foo \ bar
>>>


于 2012-08-23T07:17:23.147 に答える
0

コメントするのに十分な評判がありませんが、上記の答えは正しくありません。

Windowsには、作業ディレクトリと作業ドライブの概念があります。Windowsにはシングルルートの概念がないため、現在の作業ドライブでは絶対パス/として扱われます。上記の例では、C:が「ルート」ドライブまたは何らかの理由で特別であるためではなく、動作中のドライブがC:であるためにになります。cd /FooBarC:\foobar

次に例を示します。

C:\Users\user> cd /
C:\> d:
D:\> cd /Users
The system cannot find the path specified.
D:\> mkdir test
D:\> cd test
D:\test> cd c:/Users
D:\test> cd /
D:\> cd test
D:\test> c:
C:\Users\> d:
D:\test> 
于 2018-04-17T17:19:02.597 に答える