本文主要是介绍DTA随笔3,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
datahelper.py
ligands = json.load(open(fpath + "ligands_can.txt"), object_pairs_hook=OrderedDict)
Python 的标准库 json 提供了对 JSON 的解析,只要 json.load 就可以将 JSON 文件转换成dict格式。但它将 JSON 的键值对保持在 dict 里,导致原有的顺序信息丢失。因为 JSON 格式本身的定义就是键顺序无关的,所以 json.load 这个行为是合理的行为。
想要保留此顺序信息,首先需要有一种保持键顺序的、类似 dict 的数据结构。collections.OrderedDict 就是一种好的选择。此外,json.load 本身为这种需求提供了钩子。
import json
from collections import OrderedDictjson.load(filename, object_pairs_hook=OrderedDict)
这样,ligands中properties的顺序是跟json中定义的顺序是一样的。
Y = pickle.load(open(fpath + "Y", "rb"), encoding='latin1')
pickle协议和JSON的区别 :
(1)JSON是一种文本序列化格式(它输出unicode文本,虽然大部分时间它被编码utf-8),而pickle是二进制序列化格式,如果需要最佳尺寸特征,则可以有效地压缩数据;
(2)JSON是人类可读的,而pickle则不是;
(3)JSON是可互操作的,并且在Python生态系统之外广泛使用,而pickle是特定于Python的;它的优点是没有外部标准强加的限制,例如JSON或XDR(不能代表指针共享); 但是这意味着非Python程序可能无法重建pickled Python对象。
要序列化对象层次结构,只需调用该dumps()函数即可。同样,要对数据流进行反序列化,请调用该**loads()**函数。
pickle.load(file,*,fix_imports = True,encoding =“ASCII”,errors =“strict”)
从打开的文件对象文件中读取pickle对象表示,并返回其中指定的重构对象层次结构。
可选的关键字参数是fix_imports,encoding和errors:
(1)如果fix_imports为true,则pickle将尝试将旧的Python 2名称映射到Python 3中使用的新名称。
(2)encoding默认为’ASCII’,是python3格式所用。如果原代码是python2格式的,则可以用encoding=‘latin1’,这样可以读取python2格式下存储的NumPy阵列和实例datetime。
for i, ch in enumerate(line[:MAX_SMI_LEN]):
enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标。
seq = ['one', 'two', 'three']
for i, element in enumerate(seq):print i, element
输出:
0 one
1 two
2 three
这篇关于DTA随笔3的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!