如何检查两个文件路径是否指向Python中的同一文件?
答案 0 :(得分: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
答案 1 :(得分:6)
您希望使用os.path.abspath(path)
来规范化每条路径以进行比较。
os.path.abspath(foo) == os.path.abspath(bar)
答案 2 :(得分:3)
简单的字符串比较应该有效:
import os
print os.path.abspath(first) == os.path.abspath(second)
归功于安德鲁,他更正了我的帖子,其中包括拨打os.path.normpath
:这是不必要的,因为os.path.abspath
的实施为你做了。
答案 3 :(得分:0)
在Windows系统上,没有samefile
功能,您还必须担心案例。来自normcase
的{{1}}功能可与os.path
结合使用来处理此案例。
abspath
这将在Windows上将“C:\ SPAM \ Eggs.txt”视为“c:\ spam \ eggs.txt”。
请注意,与from os.path import abspath, normcase
def are_paths_equivalent(path1, path2):
return normcase(abspath(path1)) == normcase(abspath(path2))
不同,所有基于规范化和比较路径的方法都不会知道完全不同的路径引用同一文件的情况。在Windows上,这意味着如果您使用SUBST,MKLINK或已安装的网络共享来创建到同一文件的多个不同路径,则这些解决方案都不能说“这是同一个文件”。希望大多数时候这不是一个问题。
答案 4 :(得分:0)
可以使用os.path.relpath(path1,path2)作为Windows上os.path.samefile(path1,path2)的变通方法吗?
如果os.path.relpath(path1,path2)返回'。'比path1和path2指向同一个地方