一种python序列化工具,包含许多带计时的序列化和反序列化快捷方式。

serialtime的Python项目详细描述


请访问GitHub repository 更多信息。

串行时间

https://img.shields.io/travis/ianlini/serialtime/master.svghttps://img.shields.io/pypi/v/serialtime.svghttps://img.shields.io/pypi/l/serialtime.svg

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_pklload_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.ndarrayh5py.dataset中所有方便的api,但是有些模块只接受完整的numpy.ndarrayh5py.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在获取实例时对其进行预处理。 在本例中,我们只是将数组中的值加倍。 我们给shapePartialPreprocessedDataset是一个实例的形状(在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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java需要帮助改变模方程   java无法解析导入组织。dom4j*   java ImageIO写入并保存黑色图像   java持久化H2中的许多实体引发异常   java如何向类发送指令?我可以使用构造函数数组吗?   java如何使用Hibernate获取数据库数据   java如何在录制视频模式期间进行人脸检测   trycatchfinally block在try和finally block都抛出异常时的java行为?   接口JAVA抽象   java编辑文件的特定行   如何在Java中打印字符串的所有排列   Android Studio如何使用库(来自eclipse项目)   java JavaFx通过另一个控制器调用一个方法   java Log4j2:在StringBuilderPerformAttable上调用toString()而不是formatTo()