Comparing two paths in python

All of these answers mention os.path.normpath, but none of them mention os.path.realpath:

os.path.realpath(path)

Return the canonical path of the specified filename, eliminating any symbolic links encountered in the path (if they are supported by the operating system).

New in version 2.2.

So then:

if os.path.realpath(path1) in (os.path.realpath(p) for p in list_of_paths):
    # ...

The os.path module contains several functions to normalize file paths so that equivalent paths normalize to the same string. You may want normpath, normcase, abspath, samefile, or some other tool.


Use os.path.normpath to convert c:/fold1/fold2 to c:\fold1\fold2:

>>> path1 = "c:/fold1/fold2"
>>> list_of_paths = ["c:\\fold1\\fold2","c:\\temp\\temp123"]
>>> os.path.normpath(path1)
'c:\\fold1\\fold2'
>>> os.path.normpath(path1) in list_of_paths
True
>>> os.path.normpath(path1) in (os.path.normpath(p) for p in list_of_paths)
True
  • os.path.normpath(path1) in map(os.path.normpath, list_of_paths) also works, but it will build a list with entire path items even though there's match in the middle. (In Python 2.x)

On Windows, you must use os.path.normcase to compare paths because on Windows, paths are not case-sensitive.