I want to test if
obj is a
pathlib path and realized that the condition
type(obj) is pathlib.PosixPath will be
False for a path generated on a Windows machine.
Thus the question, is there a way to test if an object is a pathlib path (any of the possible,
WindowsPath, or the
Pure...-analogs) without checking for all 6 version explicitly?
isinstance(). Some sample code:
# Python 3.4+ import pathlib path = pathlib.Path("foo/test.txt") # path = pathlib.PureWindowsPath(r'C:\foo\file.txt') # checks if the variable is any instance of pathlib if isinstance(path, pathlib.PurePath): print("It's pathlib!") # No PurePath if isinstance(path, pathlib.Path): print("No Pure path found here") if isinstance(path, pathlib.WindowsPath): print("We're on Windows") elif isinstance(path, pathlib.PosixPath): print("We're on Linux / Mac") # PurePath else: print("We're a Pure path")
isinstance(path, pathlib.PurePath) work for all types? Take a look at this diagram:
We see that
PurePath is at the top, that means everything else is a subclass of it. Therefore, we only have to check this one.
Same reasoning for
Path to check non-pure Paths.
<em>Bonus</em>: You can use a tuple in
isinstance(path, (pathlib.WindowsPath, pathlib.PosixPath)) to check 2 types at once.