Path¶
All paths are stored internally using the nob.Path
class. Paths are full
(w.r.t. their Nob
or NobView
), and are in essence a list of the keys
constituting the nested address. They can however be viewed equivalently as
a unix-type path string with /
separators. Here are some examples
p1 = Path(['key1'])
p1 >>> Path(/key1)
p2 = Path('/key1/key2')
p2 >>> Path(/key1/key2)
p1 / 'key3' >>> Path(/key1/key3)
p2.parent >>> Path(/key1)
p2.parent == p1 >>> True
'key2' in p2 >>> True
[k for k in p2] >>> ['key1', 'key2']
p2[-1] >>> 'key2'
len(p2) >>> 2
These can be helpful to manipulate paths yourself, as any full access with a
string to a Nob
or NobView
object also accepts a Path
object.
So say you are accessing the keys in list_of_keys
at one position, but
that thet also exist elsewhere in the tree. You could use e.g.:
root = Path('/path/to/root/of/keys')
[n[root / key] for key in list_of_keys]
Warning
You might have noticed that Path
behaves similarly to the
pathlib.PosixPath
object, and that’s by design. However, it is not
the same. Don’t feed Nob
objects pathlib.PosixPath
objects,
that won’t go well.