基于nodes的文件系统目录抽象
项目描述
node.ext.directory
维护模式
此包处于维护模式。此包的后续版本为https://pypi.python.org/pypi/node.ext.fs。
概述
node.ext.directory是文件系统目录的node实现。
有关node的更多信息,请参阅https://pypi.python.org/pypi/node。
用法
创建新文件
from node.ext.directory import File
file_path = 'file.txt'
f = File(name=file_path)
# set contents via data attribute
f.data = 'data\n'
# set contents via lines attribute
f.lines = ['data']
# set permissions
f.fs_mode = 0o644
# persist
f()
读取现有文件
file_path = 'file.txt'
f = File(name=file_path)
assert(f.data == 'data\n')
assert(f.lines == ['data'])
assert(f.fs_mode == 0o644)
包含二进制数据的文件
from node.ext.directory import MODE_BINARY
file_path = 'file.txt'
f = File(name=file_path)
f.mode = MODE_BINARY
f.data = b'\x00\x00'
assert(f.data == b'\x00\x00')
# lines property won't work if file in binary mode
f.lines # raises RuntimeError
创建目录
from node.ext.directory import Directory
dir_path = '.'
d = Directory(name=dir_path)
# add subdirectories and files
d['sub'] = Directory()
d['file.txt'] = File()
# set permissions for directory
d['sub'].fs_mode = 0o755
# persist
d()
读取现有目录
dir_path = '.'
d = Directory(name=dir_path)
>>> d.printtree()
<class 'node.ext.directory.directory.Directory'>: .
<class 'node.ext.directory.directory.File'>: file.txt
<class 'node.ext.directory.directory.Directory'>: sub
定义文件工厂
from node.ext import directory
class PyFile(File):
pass
# set global factories
directory.file_factories['.py'] = PyFile
# set local factories
d = Directory(name='.', factories={'.py': PyFile})
当读取.py文件时,使用PyFile实例化子节点
>>> with open('foo.py', 'w') as f:
... f.write('#')
>>> d = Directory(name='.', factories={'.py': PyFile})
>>> d.printtree()
<class 'node.ext.directory.directory.Directory'>: .
<class '...PyFile'>: foo.py
Python版本
Python 2.7, 3.7+
可能与其他版本兼容(未测试)
贡献者
Robert Niederreiter(作者)
更改
0.8.1 (2024-05-23)
修复已弃用的导入。[rnix]
添加关于后续包的注释。[rnix]
0.8 (2022-03-21)
用MappingNode替换已弃用的Nodify的使用。[rnix]
将废弃的Adopt用法替换为MappingAdopt。[rnix]
0.7
支持Python 3。[rnix, 2017-06-06]
如果文件或目录存在且fs_mode未明确设置,则从文件系统中读取fs_mode。[rnix, 2017-06-06]
从IDirectory接口中删除backup选项。它从未真正正常工作过,并且从概念上讲,IDirectory不是处理文件备份的正确位置。[rnix, 2017-06-04]
0.6
引入node.ext.directory.interfaces.IFile.direct_sync设置。[rnix, 2017-01-30]
完成node.ext.directory.interfaces.IFile和node.ext.directory.interfaces.IDirectory以反映实现的功能。[rnix, 2017-01-30]
将node.ext.directory.directory.MODE_TEXT和node.ext.directory.directory.MODE_BINARY移动到node.ext.directory.interfaces。[rnix, 2017-01-30]
0.5.4
在node.ext.directory.FileStorage.__call__中通过名称检查要持久化的目录是否已作为文件存在。[rnix, 2015-10-05]
如果fs_path不存在,则在node.ext.directory.FileStorage.__call__中实现回退到path。[rnix, 2015-10-05]
如果fs_path不存在,则在node.ext.directory.FileStorage._get_data中实现回退到path。[rnix, 2015-10-05]
在node.ext.directory.FileStorage._get_mode中使用self.mode属性设置器而不是内部self._mode来设置初始模式。[rnix, 2015-10-05]
0.5.3
在__call__之后从内部引用中删除已删除的键,以便在再次添加具有相同键的文件或目录时返回正确的结果。[rnix, 2015-07-20]
0.5.2
使用try/except而不是迭代来检查目录子项是否已在内存中。[rnix, 2015-05-12]
0.5.1
始终使用os.chmod来设置目录权限,而不仅仅是如果已存在。[rnix, 2015-03-03]
0.5
在目录和文件上引入fs_mode。[rnix, 2015-03-03]
0.4
如果无数据,则在File.lines中返回空列表。[rnix, 2015-02-18]
考虑文件系统编码。默认为UTF-8。[rnix, 2015-02-18]
修改时进行树锁定。[rnix, 2014-09-02]
防止在__setitem__中出现空键。[rnix, 2014-09-02]
使用plumbing装饰器。[rnix, 2014-08-25]
0.3
在目录上引入default_file_factory以控制默认文件子项的创建。[rnix, 2013-12-09]
将FileStorage中的文件逻辑移动。[rnix, 2013-08-06]
将file_factories作为目录存储的类属性。[rnix, 2013-08-06]
将ignores作为目录存储的类属性。[rnix, 2013-08-06]
清理接口。[rnix, 2013-08-06]
0.2
几乎完全重写。现在符合基于node的API的范式。[rnix, 2012-01-30]
0.1
初始版本
许可证
版权所有(c)2010-2021,BlueDynamics Alliance,奥地利 版权所有(c)2021-2024,Node贡献者 保留所有权利。
在满足以下条件的情况下,允许以源代码和二进制形式重新分发和使用,无论是否修改:
源代码的重新分发必须保留上述版权声明、本条件列表和以下免责声明。
二进制形式的重新分发必须在使用文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。
本软件由版权所有者和贡献者提供,按“原样”提供,并放弃任何明示或暗示的保证,包括但不限于适销性和适用于特定目的的暗示保证。在任何情况下,版权所有者或贡献者均不对任何直接、间接、偶然、特殊、示范性或后果性损害(包括但不限于替代商品或服务的采购;使用、数据或利润的损失;或业务中断)承担责任,无论该损害是否由使用本软件引起,即使被告知此类损害的可能性。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。