File Paths in Python
Here’s the translation of the Go code to Python, with explanations in Markdown format suitable for Hugo:
The os.path
module provides functions to parse and construct file paths in a way that is portable between operating systems; dir/file
on Linux vs. dir\file
on Windows, for example.
import os
import os.path
def main():
# os.path.join should be used to construct paths in a
# portable way. It takes any number of arguments
# and constructs a hierarchical path from them.
p = os.path.join("dir1", "dir2", "filename")
print("p:", p)
# You should always use os.path.join instead of
# concatenating '/'s or '\'s manually. In addition
# to providing portability, join will also
# normalize paths by removing superfluous separators
# and directory changes.
print(os.path.join("dir1//", "filename"))
print(os.path.join("dir1/../dir1", "filename"))
# os.path.dirname and os.path.basename can be used to split a path to the
# directory and the file. Alternatively, os.path.split will
# return both in the same call.
print("Dir(p):", os.path.dirname(p))
print("Base(p):", os.path.basename(p))
# We can check whether a path is absolute.
print(os.path.isabs("dir/file"))
print(os.path.isabs("/dir/file"))
filename = "config.json"
# Some file names have extensions following a dot. We
# can split the extension out of such names with os.path.splitext.
root, ext = os.path.splitext(filename)
print(ext)
# To find the file's name with the extension removed,
# we can use the root part from splitext.
print(root)
# os.path.relpath finds a relative path between a base and a
# target. It returns an error if the target cannot
# be made relative to base.
rel = os.path.relpath("a/b/t/file", "a/b")
print(rel)
rel = os.path.relpath("a/c/t/file", "a/b")
print(rel)
if __name__ == "__main__":
main()
To run the program, save it as file_paths.py
and use python
:
$ python file_paths.py
p: dir1/dir2/filename
dir1/filename
dir1/filename
Dir(p): dir1/dir2
Base(p): filename
False
True
.json
config
t/file
../c/t/file
This Python code demonstrates the usage of the os.path
module, which provides similar functionality to Go’s filepath
package. The os.path
module is part of Python’s standard library and offers cross-platform file path manipulation.
Key differences from the Go version:
- Python uses
os.path
instead offilepath
. - Python’s
os.path.join
is equivalent to Go’sfilepath.Join
. - Python uses
os.path.dirname
andos.path.basename
instead offilepath.Dir
andfilepath.Base
. - Python’s
os.path.isabs
is equivalent to Go’sfilepath.IsAbs
. - Python uses
os.path.splitext
to get the file extension, which returns both the root and the extension. - Python’s
os.path.relpath
is equivalent to Go’sfilepath.Rel
, but it doesn’t return an error - it raises an exception if there’s a problem.
The overall structure and functionality of the program remain similar, showcasing how to manipulate file paths in a cross-platform manner using Python.