Object-oriented alternative to os/os.path/shutil
Update 2013-01-27: Version 0.2.1 has been in production since 2008 and is supported. Few bugs have been reported so the code is solid. The next version (to be called 1.0 or 2.0, I’m not sure which) will be mostly moderninzing the documentation and Python 3 support. Python 2.4 and 2.5 support will probably be dropped as is the case with most other Python projects migrating to 3.
Unipath is package for doing pathname calculations and filesystem access in an object-oriented manner, an alternative to os.path.*, shutil.*, glob, and some os.* functions.. It’s based on Jason Orendorff’s path.py but does not adhere as strictly to the underlying functions’ syntax, in order to provide more user convenience and higher-level functionality. For example:
- p.mkdir() succeeds silently if the directory already exists, and
- p.mkdir(True) creates intermediate directories a la os.makedirs.
- p.rmtree(parents=True) combines shutil.rmtree, os.path.isdir, os.remove, and os.removedirs, to recursively remove whatever it is if it exists.
- p.read_file("rb") returns the file’s contents in binary mode.
- p.needs_update([other_path1, ...]) returns True if p doesn’t exist or has an older timestamp than any of the others.
- extra convenience functions in the unipath.tools module. dict2dir creates a directory hierarchy described by a dict. dump_path displays an ASCII tree of a directory hierarchy.
The Path class subclasses AbstractPath, which contains only those methods that don’t consult the filesystem. Most users just use the Path class and ignore the base class, but it’s there for specialized uses.
Here’s a comparision of some Path operations and their stdlib equivalents:
# Reference a file that’s two directories above another file. p = os.path.join(os.path.dirname(os.path.dirname(“/A/B/C”)), “file.txt”) p = Path(“A/B/C”).parent.parent.child(“file.txt”) p = Path(“A/B/C”).ancestor(2).child(“file.txt”) p0 = Path(“/A/B/C”); p = Path(p0.parent.parent, “file.txt”)
# Change the extension of a path. p = os.path.splitext(“image.jpg”) + “.png” p = Path(“image.jpg”).name + “.png”
Documentation is in the README and on the website.
Unipath is for Python 2.4 or higher, and comes with a test suite..
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.