Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查Python中的绝对路径_Python_Path - Fatal编程技术网

检查Python中的绝对路径

检查Python中的绝对路径,python,path,Python,Path,如何在Python中检查两个文件路径是否指向同一个文件?您希望使用它来规范化每个路径以进行比较 os.path.abspath(foo) == os.path.abspath(bar) 简单的字符串比较应该可以: import os print os.path.abspath(first) == os.path.abspath(second) 要归功于Andrew,他更正了我最初的帖子,其中包括调用os.path.normpath:这是不必要的,因为os.path.abspath的实现为您提

如何在Python中检查两个文件路径是否指向同一个文件?

您希望使用它来规范化每个路径以进行比较

os.path.abspath(foo) == os.path.abspath(bar)

简单的字符串比较应该可以:

import os
print os.path.abspath(first) == os.path.abspath(second)

要归功于Andrew,他更正了我最初的帖子,其中包括调用
os.path.normpath
:这是不必要的,因为
os.path.abspath
的实现为您提供了这一功能。

在Windows系统上,没有
samefile
函数,您还需要担心案例。
os.path
中的
normcase
函数可与
abspath
组合处理此情况

$ 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
from os.path import abspath, normcase

def are_paths_equivalent(path1, path2):
    return normcase(abspath(path1)) == normcase(abspath(path2))
<>这将考虑“C:\垃圾邮件\鸡蛋.txt”相当于“C:\垃圾邮件\鸡蛋.txt”在Windows .< /p>
请注意,与
samefile
不同,所有基于规范化和比较路径的方法都不会知道完全不同的路径引用同一文件的情况。在Windows上,这意味着如果使用SUBST、MKLINK或挂载的网络共享创建指向同一文件的多个不同路径,这些解决方案中没有一个能够说“这是同一文件”。希望在大多数情况下这不是一个太大的问题。

可能有人可以使用os.path.relpath(path1,path2)作为Windows上os.path.samefile(path1,path2)的解决方法


如果os.path.relpath(path1,path2)返回“.”,那么path1和path2指向同一个位置

您不需要首先调用
normpath
。安德鲁:如果您只是比较字符串,在某些情况下,您可能会得到指向同一文件的不同路径。abspath没有做任何聪明的事情,它只添加了一个前缀。@安德鲁:不,我收回它!你是对的,对于*nix来说,至少实现为你做到了这一点。每天都是上学日:)我不同意,from:返回路径名路径的规范化绝对版本。在大多数平台上,这相当于normpath(join(os.getcwd(),path))。回答不错。我不知道这个方法!请注意,此文档仅在Unix上提供。它在Windows上不存在,至少在Python2.6中不存在。对于Windows,您可以使用
os.stat('foo')==os.stat('bar')
注意:这似乎只在文件实际存在时才起作用。如果它们是假设性的(例如,在复制文件之前检查目标目标是否已存在),则需要进行abspath比较。