对Java的METAINF进行编码/解码/清单.MF在Python中
java-manifest的Python项目详细描述
java清单py
在Python中对Java的META-INF/MANIFEST.MF
进行编码/解码。在
安装
要在PyPI上安装最新版本,请运行:
$ pip install java-manifest
使用
清单由字典列表表示,其中每个字典
对应于清单中以空行分隔的部分,并且
字典有str
键和str
或{
java_manifest.loads
接受包含清单格式数据的字符串,并且
返回字典的列表,其中每个字典都是
显示。java_manifest.load
使用任何typing.TextIO
执行相同的操作
可读对象。在
类似地,java_manifest.dumps
返回清单格式的数据字符串
从字典列表中,其中每个字典都是
显示。java_manifest.dump
执行相同的操作,写入任何typing.TextIO
可写对象。在
>>>importjava_manifest>>>manifest=[...{..."Name":"README-Example",..."Some-Str":"Some random string",...},...]>>>manifest_str=java_manifest.dumps(manifest)>>>print(manifest_str)Name:README-ExampleSome-Str:Somerandomstring<BLANKLINE>
还有一个from_jar
函数可以找到META-INF/MANIFEST.MF
文件
在jar中,java_manifest.load
就是这样。在
>>>importjava_manifest>>>manifest=java_manifest.from_jar("test_files/simple.jar")
自定义编码器/解码器
因为Java的manifest文件格式不处理
一节,具体使用该格式创建特殊的编码/解码规则
它可以将一些结构化数据转换为基本字符串,以便对其进行编码
变成一个清单,反之亦然。的encoder
和decoder
参数
倾倒和装载分别负责处理。编码器
和解码器都接受一个键值对。但是,编码器接收
潜在的结构化数据作为值,并返回纯字符串,而
解码接收字符串值并返回潜在的结构化数据。在
正如我们已经看到的,默认的编码器和解码器没有转换 并防止您尝试转储非字符串数据。在
>>>importjava_manifest>>>print(java_manifest.dumps([{"foo":"bar"}]))foo:bar>>>print(java_manifest.dumps([{"int":1}]))Traceback(mostrecentcalllast):...ValueError:key'int'hastype<class'int'> value, expected str
但是,您可以描述更多的自定义编码器,以支持 串。在
>>>defencode(key,val):...ifisinstance(val,list):...return",".join(val)...returnval>>>print(java_manifest.dumps([{"foo":"bar","names":["alice","bob","charlie"]}],encoder=encode))foo:barnames:alice,bob,charlie<BLANKLINE>
类似于自定义解码器。在
>>>importjava_manifest>>>defdecode(key,val):...# In reality you'd probably want to target only specific keys, to avoid...# messing up random strings containing commas. This is just an example....vals=val.split(",")...iflen(vals)==1:...returnval...else:...returnvals>>>manifest=java_manifest.loads("foo: bar\r\nnames: alice,bob,charlie",decoder=decode)>>>print(manifest)[{'foo':'bar','names':['alice','bob','charlie']}]
- 项目
标签: