纯python基树实现

ppy-radix的Python项目详细描述


ppy基数是py基数的纯python叉,它实现了ipv4和ipv6网络前缀的存储和检索的基数树数据结构。_ py-radix:https://github.com/mjschultz/py-radix

基数树通常用于路由表查找。它有效地
存储不同长度的网络前缀,并允许快速查找包含
的网络。

(在这个fork中,删除了c实现,以简化在非性能关键情况下使用aws lambda的
。否则,此分叉跟踪上游py基数repo。更好的解决方案是为py基数构建一个
`manylinux1 wheel`\uu.)


…_ manylinux1控制盘:https://github.com/mjschultz/py-radix/issues/30


installation
----


>通过pip安装pip-install-ppy-radix

或使用标准的python-distutils咒语:::

python setup.py build
pythonsetup.py install

测试位于``tests/``目录中,可以使用
``python setup.py notests``运行。


用法
----


一个简单的示例演示了大多数功能:::

导入基数

=radix.radix()

添加节点将返回radix node对象。您可以在其"data"dict中创建任意成员来存储数据
rnode=rtree.add("10.0.0.0/8")
rnode.data["blah"]="随心所欲"

以下三个调用是相同的:
rnode=rtree.add("10.0.0.0/16")
rnode=rtree.add("10.0.0.0",16)
rnode=rtree.add(network="10.0.0.0",masklen=16)

通过socket模块
功能。在这种情况下,基数模块将假定
四字节地址是IPv4地址,十六字节地址是IPv6地址。例如:
binary_addr=inet_ntoa("172.18.22.0")
rnode=rtree.add(packed=binary_addr,masklen=23)

=socket.inet_ntoa("10.0.0.0")
rnode=rtree.search_exact(packed=addr,masklen=8)

best match search将返回包含搜索项(路由样式查找)的最长匹配前缀
(反向路由样式查找)
rnode=rtree.search_worst("10.123.45.6")


如果存在于树中)
rnodes=rtree.search\u covered("10.123.0.0/16")

radix节点有两个隐式成员:
print rnode.network->;"10.0.0.0"
print rnode.prefix->;"10.0.0/8"
print rnode.prefixlen->;8
打印rnode.family->;socket.af_inet
打印rnode.packed->;'\n\x00\x00\x00'

rnode.prefix

prefixes()方法将返回已输入的所有前缀(作为字符串列表)
prefixes=rtree.prefixes()

如果树很大。迭代时不要修改树(添加或删除节点),否则将中止迭代并收到运行时警告。允许更改节点的数据dict

对于rtree中的rnode:
打印rnode。prefix



license
----


ppy基数,与py基数一样,是在isc/bsd许可下授权的。基本的
基树实现是从mrtd中获取(并修改)的,并且受4个期限的bsd许可证的约束。有关详细信息,请参阅许可证文件。

contribution
----


上游作者<;mjschultz@gmail.com>;

用于安装/测试等。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
具有多用户OU和多访问CNs的java Spring LDAP身份验证   java分配的变量神秘地变为null   java比较两个表或文本文件,并用行号和列输出差异   java如何在同一构建目录中设置netbeans中的文件路径?   java如何在avro模式中定义byte[]和LocalDateTime?   java在多个活动和片段中使用相同的微调器。实施它的最佳方式是什么?   java使用OOPS扩展已编写的类   java如何在特定于文件的基础上禁用Eclipse中的编译器警告?   java将字符串转换为日期的格式不正确   Java文件从一台服务器复制到另一台服务器   java Jacksonal和JacksonApperasl的最新jar版本是什么?   java如何在使用selenium chrome web驱动程序时禁用chrome中的身份验证提示   java是什么。推荐人和推荐人。Eclipse工作区中的元数据以及它们是否应该在设备之间同步?   java我应该把sqlite db文件放在哪里,这样我的jar就可以访问它了?这对连接字符串有何影响?   java如何在选择单元格时设置JTable标题背景色   java Cassandra 2 Hector:复合行键上的范围切片查询返回空行   java方法注释继承   Python字节对象与java   java Android和从sqlite数据库加载listview