使用阀门VDF文本格式的库
vdf的Python项目详细描述
纯python模块,用于对vdf进行(反)序列化,其工作原理与json类似。
测试并在python2.7、python3.3+、pypy和pypy3上工作。
VDF是阀门的键值文本文件格式
https://developer.valvesoftware.com/wiki/KeyValues
支持的版本:kv1
不受支持:kv2和kv3
安装
您可以从https://pypi.org/project/vdf/或通过pip
pip install vdf
从github
安装当前开发版本pip install git+https://github.com/ValvePython/vdf
问题和解决方案
- 存在包含重复密钥的已知文件。这是支持的格式和 无法映射到dict。对于这种情况,模块提供vdf.VDFDict 可以用作映射器而不是dict。有关详细信息,请参见示例部分。
- 默认情况下,反序列化将返回一个dict,它既不保留也不保证 由于hash randomization而产生的密钥顺序。如果关键顺序很重要 我建议使用collections.OrderedDict,或vdf.VDFDict。
示例用法
对于文本表示法
importvdf# parsing vdf from file or stringd=vdf.load(open('file.txt'))d=vdf.loads(vdf_text)d=vdf.parse(open('file.txt'))d=vdf.parse(vdf_text)# dumping dict as vdf to stringvdf_text=vdf.dumps(d)indented_vdf=vdf.dumps(d,pretty=True)# dumping dict as vdf to filevdf.dump(d,open('file2.txt','w'),pretty=True)
对于二进制表示
d=vdf.binary_loads(vdf_bytes)b=vdf.binary_dumps(d)# alternative format - VBKVd=vdf.binary_loads(vdf_bytes,alt_format=True)b=vdf.binary_dumps(d,alt_format=True)# VBKV with header and CRC checkingd=vdf.vbkv_loads(vbkv_bytes)b=vdf.vbkv_dumps(d)
使用替代映射器
d=vdf.loads(vdf_string,mapper=collections.OrderedDict)d=vdf.loads(vdf_string,mapper=vdf.VDFDict)
VDFDict的工作方式与常规的dict很相似,只是它处理重复项并记住 插入顺序。此外,键只能是str类型。最重要的区别 当试图分配一个已经存在的密钥时,它将创建一个副本而不是 将值重新分配到现有的键。
>>>d=vdf.VDFDict()>>>d['key']=111>>>d['key']=222>>>dVDFDict([('key',111),('key',222)])>>>d.items()[('key',111),('key',222)]>>>d['key']111>>>d[(0,'key')]# get the first duplicate111>>>d[(1,'key')]# get the second duplicate222>>>d.get_all_for('key')[111,222]>>>d[(1,'key')]=123# reassign specific duplicate>>>d.get_all_for('key')[111,123]>>>d['key']=333>>>d.get_all_for('key')[111,123,333]>>>deld[(1,'key')]>>>d.get_all_for('key')[111,333]>>>d[(1,'key')]333>>>printvdf.dumps(d)"key""111""key""333">>>d.has_duplicates()True>>>d.remove_all_for('key')>>>len(d)0>>>d.has_duplicates()False