2つのファイルパスがPythonの同じファイルを指しているかどうかを確認する方法はありますか?Pythonの絶対パスを確認する
9
A
答えて
24
$ touch foo
$ ln -s foo bar
$ python
Python 2.5.1 (r251:54863, Feb 6 2009, 19:02:12)
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> help(os.path.samefile)
Help on function samefile in module posixpath:
samefile(f1, f2)
Test whether two pathnames reference the same actual file
>>> os.path.samefile("foo", "bar")
True
6
あなたは比較のために、それぞれのパスを正規化するためにos.path.abspath(path)
を使用したいです。
os.path.abspath(foo) == os.path.abspath(bar)
3
単純な文字列比較動作するはずです:os.path.abspath
の実装は、あなたのためにそれをしないので、これは不要である:アンドリューへ
import os
print os.path.abspath(first) == os.path.abspath(second)
クレジット、彼はos.path.normpath
への呼び出しを含め、私の最初の記事を修正しました。 Windowsシステムで
0
、そこにはsamefile
機能はありません、あなたはまた、ケースを心配する必要があります。この場合、normcase
の機能をos.path
と組み合わせてabspath
と組み合わせることができます。
from os.path import abspath, normcase
def are_paths_equivalent(path1, path2):
return normcase(abspath(path1)) == normcase(abspath(path2))
これは、 "C:\ SPAM \ Eggs.txt" を検討する:Windows上の "\スパム\ eggs.txt C" に相当します。 samefile
異なり、パスを正規化し、比較に基づいて、すべての方法は完全に異なるパスが同じファイルを参照するケースの認識ではないこと
注。 Windowsでは、これは、SUBST、MKLINK、またはマウントされたネットワーク共有を使用して同じファイルへの複数の異なるパスを作成する場合、これらのソリューションでは「それは同じファイル」とは言えません。うまくいけば、それはほとんどの場合、あまり問題にはならない。
0
は1つが、Windows上os.path.samefile(パス1、パス2)のための回避策としてos.path.relpath(パス1、パス2)を使用することができますことができますか?
os.path.relpath(パス1、パス2)が返された場合は ''同じ場所
関連する問題
- 1. パスが絶対パスか相対パスかを確認してください
- 2. 絶対パスと絶対パスの比較
- 3. Pythonの相対パスからの絶対パスを見つける
- 4. 絶対パスと相対パスをPythonで使用する場合
- 5. 絶対パスを絶対パスに変換する
- 6. 相対パスと絶対パス
- 7. 絶対パス
- 8. 絶対パスは
- 9. 絶対パスRewriteRule
- 10. Vue.jsの絶対パス
- 11. ノードウィンドウの絶対パス
- 12. fopen()の絶対パス
- 13. エクスプレスファイルの絶対パス?
- 14. Spring MVC相対パスへの絶対パス
- 15. XSLT絶対パスからの相対パス
- 16. 絶対パスのMkdir()絶対パスでのMkdir()
- 17. Firefox Add on - 絶対リンクと相対リンクを確認する
- 18. CMakeの相対パスに対する絶対パス
- 19. 絶対パスを指すリンク
- 20. Node.js:相対パスと絶対パス
- 21. 相対パスと絶対パスJava
- 22. 春@RequestMapping絶対パス
- 23. Mojolicious url_for:絶対パス
- 24. ギャルと絶対パス
- 25. サーブレットは:絶対パス
- 26. SoapUIと絶対パス
- 27. PHPの絶対パスをrequireonce
- 28. 絶対パスへの相対パスを変換するBash&Perlスクリプト
- 29. linuxの絶対パスを相対パスに変換する方法
- 30. リンクテーブルを相対パスへの絶対パスに変更する
ニースの答え。私はこの方法について知らなかった! – jkp
これはUnix上でのみ利用可能であると書かれていることに注意してください。少なくともPython 2.6では、Windowsでは存在しません。 – Weeble
は、Windowsの場合は、あなたが 'はos.stat(「FOO」)==はos.stat(「バー」)との動作を近似することができる' – wim