2010-07-10 2 views
45

когда я даю Ls -l /etc/fonts/conf.d/70-yes-bitmaps.confкак найти полный (абсолютный путь) целевого файл символической ссылки или мягкой ссылку в питоне

lrwxrwxrwx <snip> /etc/fonts/conf.d/70-yes-bitmaps.conf -> ../conf.avail/70-yes-bitmaps.conf 

поэтому для символической ссылки или мягкой ссылки, как найти полный (абсолютный путь) целевого файла в Python,

Если я использую

os.readlink('/etc/fonts/conf.d/70-yes-bitmaps.conf')

выводит

../conf.avail/70-yes-bitmaps.conf

, но мне нужен абсолютный путь не относительный путь, поэтому мой желаемый результат должен быть,

/etc/fonts/conf.avail/70-yes-bitmaps.conf

как заменить .. с фактическим полным путем к родительскому каталогу символической ссылки или файла софт-ссылки.

ответ

8

http://docs.python.org/library/os.path.html#os.path.abspath

также joinpath и normpath, в зависимости от того, вы в текущем рабочем каталоге, или вы работаете с вещами в другом месте. normpath может быть более прямой для вас.

Update:

именно:

os.path.normpath( 
    os.path.join( 
    os.path.dirname('/etc/fonts/conf.d/70-yes-bitmaps.conf'), 
    os.readlink('/etc/fonts/conf.d/70-yes-bitmaps.conf') 
) 
) 
+2

Будьте осторожны, хотя: вы должны пройти путь, который не является символической ссылкой на readlink он будет злиться и дать следующее исключение: 'OSError: [Errno 22 ] Недопустимый аргумент: 'your-path'' – Diego

76
os.path.realpath(path) 

os.path.realpath возвращает канонический путь указанного файла, устраняя любые символические ссылки, встречающиеся на пути.

+1

os.path.realpath не устраняет символические ссылки в Python 3.2 под Windows 7. (Ошибка?) –

+1

Хммм ... Я вижу, что это была открытая ошибка в течение 1,5 лет: http://bugs.python.org/issue9949 –

+1

Получив эту же проблему, 3 года спустя: c – Coburn

12

Как говорится в unutbu, os.path.realpath (path) должен быть правильным ответом, возвращая канонический путь указанного имени файла, разрешая любые символические ссылки на их цели. Но он разбит под Windows.

Я создал патч для Python 3.2, чтобы исправить эту ошибку, и загрузить его по адресу:

http://bugs.python.org/issue9949

Он фиксирует функцию Realpath в Python32 \ Lib \ ntpath.py

I «ве также поместить его на моем сервере, здесь:

http://www.burtonsys.com/ntpath_fix_issue9949.zip

К сожалению, ошибка присутствует в Py thon 2.x тоже, и я не знаю, как это исправить.

0

documentation говорит использовать os.path.join():

The result may be either an absolute or relative pathname; if it is relative, it may be converted to an absolute pathname using os.path.join(os.path.dirname(path), result) .

 Смежные вопросы

  • Нет связанных вопросов^_^