How to delete a symbolic link in python?

I have been trying to delete some symbolic links in my working directory, but I am facing some issues.

os.remove also removes the actual contents of the original folder of the link

os.shutil throws up an error in case of symbolic links.

Is there a way to remove a symbolic link using python commands without destroying the original content?

Thanks

Answers


os.unlink() works for me. It removes the symlink without removing the directory that it links to.


If the directory name contains a trailing slash, the linux rm command will follow the link and try to delete the directory. See Remove a symlink to a directory. The os.remove documentation says that it will give you an OSError if you try to remove a directory but maybe that doesn't always happen in the case of symlinks.


Sorry,my Bad, I had made a stupid programming mistake : I was stupidly deleting the source instead of the links.

The correct answer is by @samfrances.

os.unlink does the trick.

In addition to this, here some other tips if you want to clear a directory using python:

Definitely not threadsafe, but you get the idea...

def rm(obj):

    if os.path.exists(obj):
        if os.path.isdir(obj):
            if os.path.islink(obj):
                 os.unlink(obj)
            else:
                shutil.rmtree(obj)
        else:
            if os.path.islink(obj):
                os.unlink(obj)
            else:
                os.remove(obj)

The accepted answer does not work on Windows with links created via mklink /D. If that is your problem the answer has been posted in this question: Delete Symlink to directory on Windows

The following code should work on both systems:

if(os.path.isdir(targetLink)):
    os.rmdir(targetLink)
else:
    os.unlink(targetLink)

in Python 3.4 and above, If link is a file, use unlink().

>>> from pathlib import Path
>>> p = Path('/some/file/')
>>> p.unlink()

If the path points to a directory, use Path.rmdir() instead.

>>> from pathlib import Path
>>> p = Path('/some/dir/')
>>> p.rmdir()

Need Your Help

Why should I not include cpp files and instead use a header?

c++ header-files

So I finished my first C++ programming assignment and received my grade. But according to the grading, I lost marks for including cpp files instead of compiling and linking them. I'm not too clear on

Get file name from a file location in Java

java url string path filenames

I have a String that provides an absolute path to a file (including the file name). I want to get just the file's name. What is the easiest way to do this?