日常开发经常需要使用python写各种工具辅助,因为工作中使用erlang作为主要语言,python作为作为工具支持避免不了和erlang有交集的地方。
例如使用python读取erlang的数据格式进行处理,例如合服。
通常erlang的数据格式多出现以下两种格式:
- 使用erlang:term_to_binary( term )序列号的二进制 erlang binary term
- 直接明文显示的数据格式,例如”#{a => a,d => [1, 2, 3, 4],{c,c} => {c,c,c}}”
针对这两种数据格式,分别使用python进行解析,然后转换成python自定义的数据类型,根据初版的python-erlastic fork之后进行修改:
- 新增codec.ErlangStrDecoder类,用于使用python直接解析文本形式的erlang结构,仅支持解析常用的binary,atom,tuple,list,map类型
- 在读取二进制支持maps类型
- 重写原有类型的str函数,方便格式化成erlang原有的显示格式
- 新定义的类型放在types.py,新格式全部继承自原生格式,方便使用
erlang和python类型参照表:
erlang type | python new type | python native type |
---|---|---|
atom | Atom | str |
binary | Binary | bytes |
tuple | Tuple | tuple |
bitstring | ErlString | str |
maps | Maps | dict |
list | List | list |
reference | Reference | Object |
port | Port | Object |
pid | Pid | Object |
export | Export | Object |
源码和使用方式请参考:python-erlterm