pathlib is the more modern way since Python 3.4. The documentation for pathlib says that "For low-level path manipulation on strings, you can also use the os.path module."
It doesn't make much difference for joining paths, but other path commands are more convenient with pathlib compared to os.path. For example, to get the "stem" (filename without extension):
os.path: splitext(basename(path))[0]
pathlib: path.stem
Also, you can use the same type of syntax (commas instead of slashes) to join paths with pathlib as well:
path_2 = Path("/home", "test", "test.txt")
Using Python's pathlib module
pathlib.Path vs. os.path.join in Python - Stack Overflow
What is the obvious way to open a file: open( ) or pathlib/Path?
Pathlib and why you should try it.
Videos
I've written a hybrid "why pathlib" and "pathlib cheat sheet" post: Python's pathlib module.
I see this resource as a living document, so feedback is very welcome.
pathlib is the more modern way since Python 3.4. The documentation for pathlib says that "For low-level path manipulation on strings, you can also use the os.path module."
It doesn't make much difference for joining paths, but other path commands are more convenient with pathlib compared to os.path. For example, to get the "stem" (filename without extension):
os.path: splitext(basename(path))[0]
pathlib: path.stem
Also, you can use the same type of syntax (commas instead of slashes) to join paths with pathlib as well:
path_2 = Path("/home", "test", "test.txt")
os.path is string-based while pathlib is object oriented
os.path operates on strings while pathlib is object-oriented. So if "/home/test/test.txt" is the absolute path (in POSIX format) to access to the file test.txt in the directory /home/test/, the commands:
from os import path
path_1 = path.join("/home", "test", "test.txt")
(executed in a Linux system) return in path_1, the string "/home/test/test.txt" (link to os.path.join() documentation.)
On the other hand, the following commands:
from pathlib import Path
path_2 = Path("/home") / "test" / "test.txt"
return an object called path_2 which represents the file.
A function and a method available with the 2 approaches
By the previous initialization, essentially:
The string
path_1can be used as argument of other functions of the moduleos.path. For example, to check if a file exists:from os import path if path.exists(path_1): # the file exists do stuffThe object
path_2is an instance of the classpathlib.Path, so with this object it is possible to call all methods of the classPath.Furthermore, if
path_2is created on a POSIX compliant system (such as Linux), its type isPosixPath(a subclass ofPath), else ifpath_2is created on a Windows system, its type isWindowsPath(a subclass of the classPath).An example of the methods available on the object
path_2is theexists()method. The snippet of code below shows how it is used:from pathlib import Path if path_2.exists(): # the file exists do stuff
Link
See this article to learn about other differences between the two ways of managing paths with Python: Paths in Python: Comparing os.path and pathlib modules
According to the Zen of Python, "there should be one-- and preferably only one --obvious way to do it."
In the book Python Crash Course I learned to use the pathlib module to read and write files:
from pathlib import Path
p = Path("my_file.txt")
contents = p.read_text()However, the Python documentation uses open( ) instead:
with open("my_file.txt", encoding="utf-8") as f:
contents = f.read()What is the best, or "obvious" approach?