用于解码bencoded数据的python模块
bendcode的Python项目详细描述
一个python模块,用于解码已定格的数据
台阶
bencoding是bittorrent的元数据表示格式 协议(BTP)。Bencoding的扩充BNF语法如下所示
dictionary = "d" 1*(string anytype) "e" list = "l" 1*anytype "e" integer = "i" signumber "e" string = number ":" <number long sequence of any CHAR> anytype = dictionary / list / integer / string signumber = "-" number / number number = 1*DIGIT CHAR = %x00-FF DIGIT = "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9"
来源:BTP RFC
用法
解码工作台编码的数据很简单
>>> import bendcode >>> bendcode.decode('i123e') 123 >>> bendcode.decode('4:John') 'John' >>> bendcode.decode('li234ei123ee') [234, 123] >>> bendcode.decode('d1:ai123e1:bi234ee') {'a': 123, 'b': 234}
你也可以解码因维度类型!
>>> import bendcode >>> bendcode.match_string('3:abc') ('abc', '') >>> bendcode.match_int('i-123e') (-123, '') >>> bendcode.match_list('li123ee') ([123], '') >>> bendcode.match_dict('d1:a1:bei123e') ({'a': 'b'}, 'i123e')
注意:匹配的函数序列返回一个元组 (first_possbile_match, remaining_unmatched_string)
Bendcode也可以编码
>>> import bendcode >>> bendcode.encode(123) 'i123e' >>> bendcode.encode('John') '4:John' >>> bendcode.encode([123, 'bro']) 'li123e3:broe' >>> bendcode.encode({'hello': 123}) 'd5:helloi123ee' >>> bendcode.encode(None) ''
您决定是否为任何函数引发异常 通过将fail_silently参数设置为^{tt3},上面提到过$ 或False
>>> import bendcode >>> bendcode.match_string('abc') (None, 'abc') >>> bendcode.match_string('abc', fail_silently=False) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "bendcode\bendcode.py", line 39, in match_string raise MalformedBencodeError('Failed to match string in ' + str(raw)) bendcode.exceptions.MalformedBencodeError: Failed to match string in abc
测试
使用以下代码运行测试
>>> from bendcode import tests >>> tests.run_tests() .................................. ---------------------------------------- Ran 34 tests in 0.015s OK
问题
如果发现任何错误,请随意创建问题 here。
许可证
BenDcode使用GNU v2许可证阅读许可条款 here。