Path manipulation library
betterpath, or “bp”, is an adaptation of the classic Twisted FilePath type and interface. bp provides a simple, robust, well-tested object abstraction over file paths, generalizing the concept of file paths beyond filesystems.
bp exposes an interface, bp.abstract.IFilePath, for file paths, and provides the following concrete implementations:
- bp.filepath.FilePath, for the root filesystem
- bp.zippath.ZipPath, for ZIP archives
- bp.memory.MemoryPath, for in-memory temporary filesystems
In addition, there are combining abstract file paths which can be wrapped around other file paths:
- bp.readonly.ReadOnlyPath, for read-only filesystems
API documentation is available at http://betterpath.rtfd.org/.
The venerable champ, os.path has been the cause of (and solution to) most of Python’s path problems over the years.
pathlib hopes to carve a path towards greatness through PEP 428.
def save(base, fragments, data): # `fragments` could contain unsafe paths! if ".." in fragments or "." in fragments: raise ValueError("Unsafe paths!") path = os.path.join(os.path.abspath(base), os.sep.join(fragments)) # Alternatively: path = os.path.join(os.path.abspath(base), *fragments) # I hope that this doesn't fail mid-write! Also, did the directories # exist? I think so, yes. with open(path, "wb") as handle: handle.write(data)
def save(base, fragments, data): path = base.descendant(fragments) path.parent().makeDirs() path.setContent(data)