1

私はこのコードスニペットを持っています

print "tmp = ", tmp
print "dirname = ", os.path.dirname(tmp)
print "tmp sane = ", (os.path.dirname(tmp.replace("\\", "/"))).replace("/", "\\")

それがこの結果を生み出す

tmp =  \\aaaa.aaa\aaaaaaaa\aaaaaaaaa\aaaa\aaaa\aaaaa\aaaaaaa\aaaaaaa\aaaa.aaaaaaaa_aaaaaa\aa\aaaaa\aaaaaa\aaa\aaaaaa\aa\aaaaa\aaaaaaa_aaaaaaaaa_aaa\aaaa_aa.aaa
dirname =
tmp sane =  \\aaaa.aaa\aaaaaaaa\aaaaaaaaa\aaaa\aaaa\aaaaa\aaaaaaa\aaaaaaa\aaaa.aaaaaaaa_aaaaaa\aa\aaaaa\aaaaaa\aaa\aaaaaa\aa\aaaaa\aaaaaaa_aaaaaaaaa_aaa

「tmp sane」が機能し、単純なディレクトリ名が機能しない理由はありますか? Windows ネットワーク名/バックスラッシュに関連するものは見つかりませんでした。

4

1 に答える 1

3

これを Windows で実行していない可能性が高いです。os.pathこの動作は、実際の Windows 環境以外でモジュールを使用する場合と完全に一致しています。

os.path現在のプラットフォームに合わせて動作を調整します。Windows ではスラッシュとバックスラッシュの両方がサポートされていますが、Linux と Mac ではスラッシュのみが認識されます。これは、コードを実行しているプラ​​ットフォームで使用される実際の規則と一致するためです。

Mac OS X や Linux などの POSIX OS で Windows パスからディレクトリ名を分割したい場合は、ntpathモジュールをインポートする必要があります。そのモジュールは Windows で実際に使用されるものですが、他のプラットフォームでも使用できます。

import ntpath
result = ntpath.dirname(path)

os.pathモジュールのドキュメントの上部を参照してください。

: オペレーティング システムによってパス名の規則が異なるため、標準ライブラリにはこのモジュールのいくつかのバージョンがあります。モジュールは、os.path常に Python が実行されているオペレーティング システムに適したパス モジュールであるため、ローカル パスに使用できます。ただし、常に異なる形式のいずれかであるパスを操作する場合は、個々のモジュールをインポートして使用することもできます。それらはすべて同じインターフェースを持っています:

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

このコンテキストでは、Cygwin は Windows ではなく POSIX 環境と見なされます。

于 2014-11-19T17:32:15.163 に答える