A while back, I had an idea for modelling a filesystem as a dict, so maybe this will inspire me to get off my ass and actually write it.
Basically, the idea is that this:
foo = rootfs['home']['amyjess']['stuff']['foo.txt']
rootfs['home']['amyjess']['stuff']['bar.txt'] = bar
would be equivalent to this: with open('/home/amyjess/stuff/foo.txt', 'r') as foo_file:
foo = foo_file.read()
with open('/home/amyjess/stuff/bar.txt', 'w') as bar_file:
bar_file.write(bar)
I really want to implement that now.Interesting to know that it's a more common pattern. I will have to think a bit on where that may go. I had always shot down any "value" with "it's just a thin transformation on top of path.join". (yay self-deprecation or something?)
>>> p = PurePath('/etc') >>> p PurePosixPath('/etc') >>> p / 'init.d' / 'apache2' PurePosixPath('/etc/init.d/apache2')
And yeah, this uses operator overload. However it does look quite nice.
with (Path.home() / '.config' / '1234.conf').open() as fd:
print('Hello', file=fd)
Granted, with / precedence you'll often need parens to group / before .You can also do this with PyFilesystem...
fs.gettext('/home/amyjess/stuff/foo.txt')
fs.settext('/home/amyjess/stuff/foo.txt', bar)
There are equivalent bytes methods.It basically mounts a dict on a filesystem, the exact opposite of what you want :)
This would insert "bar/baz.txt" from filesystem "foo" in to a template:
${.fs.foo.bar.baz.txt}My only suggestion would be to improve the search optimization for pypi.
It's the ~10th result for https://pypi.python.org/pypi?%3Aaction=search&term=pyfilesys... and a page down on https://pypi.python.org/pypi?%3Aaction=search&term=fs&submit...
It's really not clear what it's called since the package name is 'fs' but the project is 'pyfilesystem'.
Cheers.
> My only suggestion would be to improve the search optimization for pypi.
Fair point. Not entirely sure how to fix that. I'll look in to it...
Name: fs
Looks like it's also registered in PyPI as "fs", from the URL: https://pypi.python.org/pypi/fs/
An exception would be in the constructor for OSFS Objects, which take a system path. I'll look in to adding support there...