Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to check if file is a symlink in Python?

In Python, is there a function to check if a given file/directory is a symlink? For example, for the below files, my wrapper function should return True.

# ls -l total 0 lrwxrwxrwx 1 root root 8 2012-06-16 18:58 dir -> ../temp/ lrwxrwxrwx 1 root root 6 2012-06-16 18:55 link -> ../log 
like image 551
Bandicoot Avatar asked Jun 17 '12 02:06

Bandicoot


People also ask

What is symlink in Python?

Description. Python method symlink() creates a symbolic link dst pointing to src.


2 Answers

To determine if a directory entry is a symlink use this:

os.path.islink(path)

Return True if path refers to a directory entry that is a symbolic link. Always False if symbolic links are not supported.

For instance, given:

drwxr-xr-x   2 root root  4096 2011-11-10 08:14 bin/ drwxrwxrwx   1 root root    57 2011-07-10 05:11 initrd.img -> boot/initrd.img-2..  >>> import os.path >>> os.path.islink('initrd.img') True >>> os.path.islink('bin') False 
like image 114
Levon Avatar answered Oct 10 '22 10:10

Levon


For python 3.4 and up, you can use the Path class

from pathlib import Path   # rpd is a symbolic link >>> Path('rdp').is_symlink() True >>> Path('README').is_symlink() False 

You have to be careful when using the is_symlink() method. It will return True even the target of the link is non-existent as long as the the named object is a symlink. For example (Linux/Unix):

ln -s ../nonexistentfile flnk 

Then, in your current directory fire up python

>>> from pathlib import Path >>> Path('flnk').is_symlink() True >>> Path('flnk').exists() False 

The programmer has to decide what he/she realy wants. Python 3 seems to have renamed a lots of classes. It might be worthwhile to read the manual page for the Path class: https://docs.python.org/3/library/pathlib.html

like image 25
Kemin Zhou Avatar answered Oct 10 '22 10:10

Kemin Zhou