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.