一种python序列化工具,包含许多带计时的序列化和反序列化快捷方式。
serialtime的Python项目详细描述
请访问GitHub repository 更多信息。
串行时间
serialtime是一个python序列化工具,包含许多带计时的序列化和反序列化快捷方式。有许多模块可以序列化python对象,例如:
然而,记住它们的api是非常困难的,并且它们的api有许多不同之处。 例如,json.dump只接受file-like对象作为参数,所以我们需要先打开文件,然后给函数一个file-like对象,而joblib.dump只接受file-path作为参数。 此外,python内置pickle/cpickle没有压缩快捷方式,因此我们还需要记住如何使用gzip之类的东西。
这个包旨在解决这些问题,并为一些流行的序列化方法提供非常简单和统一的api快捷方式。 此外,我们使用BisTiming来计算执行时间,因此您还可以很容易地知道序列化的速度。
安装
安装serialtime
pip install serialtime
如果要使用save_joblib_pkl或load_joblib_pkl:
pip install scikit-learn scipy
如果您想使用try_load_yaml:
pip install PyYAML
文件
快捷键
python内置pickle/cpickle
serialtime.save_pkl(obj,path,log_description=None,logger=None,logging_level=logging.INFO,verbose_start=True,verbose_end=True,end_in_new_line=True,log_prefix="...")
obj=serialtime.load_pkl(path,log_description=None,logger=None,logging_level=logging.INFO,verbose_start=True,verbose_end=True,end_in_new_line=True,log_prefix="...")
python内置pickle/cpickle+gzip
serialtime.save_pklgz(obj,path,log_description=None,logger=None,logging_level=logging.INFO,verbose_start=True,verbose_end=True,end_in_new_line=True,log_prefix="...")
obj=serialtime.load_pklgz(path,log_description=None,logger=None,logging_level=logging.INFO,verbose_start=True,verbose_end=True,end_in_new_line=True,log_prefix="...")
作业库
serialtime.save_joblib_pkl(obj,path,log_description=None,logger=None,logging_level=logging.INFO,verbose_start=True,verbose_end=True,end_in_new_line=True,log_prefix="...")
obj=serialtime.load_joblib_pkl(path,log_description=None,logger=None,logging_level=logging.INFO,verbose_start=True,verbose_end=True,end_in_new_line=True,log_prefix="...")
加载yaml的交互式尝试
有时我们想在程序中间加载配置文件。 如果我们运行程序很长,文件格式不正确,程序可能会直接引发错误并退出,所以我们没有任何机会修复文件。 serialtime.try_load_yaml可以尝试加载该文件,当遇到任何错误时暂停,并询问您是否重新加载该文件。 然后我们可以修复文件并继续运行程序。
serialtime.try_load_yaml(yaml_path)
数据集包装器
PartialPreprocessedDataset用于在不移动或复制原始内存的情况下透明地重新索引数据。
有时我们希望重新索引数据,例如:
In[1]:importnumpyasnpIn[2]:dset=np.asarray([1,2,3])In[3]:dsetOut[3]:array([1,2,3])In[4]:idx=[2,0]In[5]:dset2=dset[idx]In[6]:dset2Out[6]:array([3,1])
但是,如果数据很大或者在磁盘上,这可能会占用太多内存。 我们可能不需要numpy.ndarray或h5py.dataset中所有方便的api,但是有些模块只接受完整的numpy.ndarray或h5py.dataset(即keras.image.ImageDataGenerator.flow())。 我们的解决方案是使用一个对象来记住新索引,并在获取值的同时转换索引。例如:
In[1]:importnumpyasnpIn[2]:fromserialtimeimportPartialPreprocessedDatasetIn[3]:dset=np.asarray([[0,1],[2,3],[4,5]])In[4]:dsetOut[4]:array([[0,1],[2,3],[4,5]])In[5]:idx=[2,0]In[6]:dset2=PartialPreprocessedDataset(dset,idx,shape=(2,),preprocess_func=lambdax:x*2)
我们还可以使用可选的preprocess_func在获取实例时对其进行预处理。 在本例中,我们只是将数组中的值加倍。 我们给shape的PartialPreprocessedDataset是一个实例的形状(在preprocess_func(dset[x]))之后可以得到的数组的形状)。然后我们可以这样做:
In[7]:dset2.shapeOut[7]:(2,2)In[8]:len(dset2)Out[8]:2In[9]:dset2[0]Out[9]:array([8,10])In[10]:dset2[1]Out[10]:array([0,2])In[11]:dset2[2]IndexError:listindexoutofrange
测试
- 对于当前环境:python setup test。
- 对于python 2.7、3.4、3.5、3.6和安装测试:tox。