Проверьте абсолютные пути в Python - PullRequest
9 голосов
/ 30 июля 2009

Как проверить, указывают ли два пути к файлу на один и тот же файл в Python?

Ответы [ 5 ]

24 голосов
/ 30 июля 2009
$ 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 голосов
/ 30 июля 2009

Вы хотите использовать os.path.abspath(path) для нормализации каждого пути для сравнения.

os.path.abspath(foo) == os.path.abspath(bar)
3 голосов
/ 30 июля 2009

Должно работать простое сравнение строк:

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

Благодарю Андрея, он исправил мой первоначальный пост, в котором содержался звонок на os.path.normpath: это не нужно, потому что реализация os.path.abspath делает это за вас.

0 голосов
/ 03 марта 2011

Может быть можно использовать os.path.relpath (path1, path2) в качестве обходного пути для os.path.samefile (path1, path2) в Windows?

Если os.path.relpath (path1, path2) возвращает '.' чем path1 и path2 указывают на одно и то же место

0 голосов
/ 05 июля 2010

В системах Windows нет функции 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" эквивалентным "c: \ spam \ eggs.txt" в Windows.

Обратите внимание, что в отличие от samefile, все методы, основанные на нормализации и сравнении путей, не будут знать о случаях, когда совершенно разные пути ссылаются на один и тот же файл. В Windows это означает, что если вы используете SUBST, MKLINK или смонтированные сетевые ресурсы для создания нескольких разных путей к одному и тому же файлу, ни одно из этих решений не сможет сказать «это один и тот же файл». Надеюсь, в большинстве случаев это не слишком большая проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...