流库的python实现
pystream-protobuf的Python项目详细描述
pystream
python实现stream library。它 启用protobuf消息的流处理;即多个protobuf消息 可以使用此库将(读取)写入(从)流。可能是 用于分析流库编码的所有文件并编写protobuf 通过相同编码将实例放入文件中。参考图书馆 GitHub page了解有关 格式化。
安装
您可以使用pip
:
pip install pystream-protobuf
用法
读数
下面是一个示例代码,用于读取包含一组protobuf消息的文件(这里 是一组VG的对齐对象,所谓 gam文件,定义为here)。 alignment类只是一个例子,它可以是任何protobuf消息。 它产生存储在文件中的protobuf对象:
importstreamimportvg_pb2alns=[aforainstream.parse('test.gam',vg_pb2.Alignment)]
输入流可以传递给方法parse
:
importstreamimportvg_pb2# ... an already existing file-like object `f` as input stream.alns=[aforainstream.parse(f,vg_pb2.Alignment)]
为了更好地控制流的打开和数据的读取,
可以使用低级方法open
:
importstreamimportvg_pb2alns_list=[]withstream.open('test.gam','rb')asistream:fordatainistream:aln=vg_pb2.Alignment()aln.ParseFromString(data)alns_list.append(aln)
可以通过显式调用close
方法来关闭流,在这种情况下
不使用with
语句打开流(请参阅测试中的更多示例
包装)。
方法open
不限于文件,因为它可以用于任何二进制文件
溪流。可以通过向方法传递文件对象而不是文件名来完成
open
或直接到Stream
类:
# ... an already existing file-like object `f` as input stream.withstream.open(fileobj=f,mode='rb')asistream:# ... continue using istream
写作
多个protobuf对象可以通过
调用dump
函数。将对齐对象列表写入
文件名test.gam
:
importstreamstream.dump('test.gam',*objects_list,buffer_size=10)
如果希望写入现有的输出流,则^ {CD9>}方法接受任何 将类似文件的对象作为输出流:
importstream# ... an already existing file-like object `f` as input stream.stream.dump('test.gam',*objects_list,buffer_size=10)
或者使用open
方法进行低级控制。这个例子附加了一组
发送到输出流的消息:
importstreamwithstream.open('test.gam','ab')asostream:ostream.write(*objects_list)ostream.write(*another_objects_list)
与读取类似,open
方法接受任何输出的fileobj
参数
流和流可以通过显式调用close
来关闭;
尤其是在不使用with
语句打开流时。
更多功能
可选gzip压缩
由Stream library编码的流是 gzip已压缩。当 打开一条小溪。
缓冲写入
默认情况下,每个调用上提供的所有protobuf消息对象都写入
消息组(有关
编码详细信息)。消息可以在
尽可能固定大小的组。缓冲区的大小可以通过
关键字参数buffer_size
到open
,dump
方法,或者流类是
构造(默认大小为0--表示没有缓冲区)。
分组消息
通过设置将消息写入流时,可以将消息按不同大小分组
缓冲区大小足够大或无限大(-1)并调用flush
方法
任何时候需要的流类。
组分隔符
对象组可以由所选的分隔符分隔(或默认情况下
None
)从流中读取时。有时,它可以帮助我们确定
默认情况下对库用户隐藏的组。此功能可以是
通过在构造流时将group_delimiter
设置为True
来启用
引用或打开流。分隔符类也可以由
delimiter_cls
。
开发
如果您使用源代码,则需要构建包:
python setup.py build
测试模块中需要在运行测试之前编译的proto文件 案例为此,需要有google protobuf编译器(>;=3.0.2) 安装。安装protobuf编译器后,运行:
make init
编译测试模块所需的proto文件。然后,使用nosetests
命令
执行测试用例的设置脚本:
python setup.py nosetests