zoukankan      html  css  js  c++  java
  • 【python】python vs Excel ( 将Excel文件转pickle文件存储 )

    一,什么是Pickle文件

    提到Pickle文件想必很多人一开始都跟我一样的反应。这是个什么鬼???

    这个文件类型只有在Python中存在。pickle提供了一个简单的持久化功能。可以将对象以文件的形式存放在磁盘上。

    pickle模块只能在python中使用,python中几乎所有的数据类型(列表,字典,集合,类等)都可以用pickle来序列化,

    pickle序列化后的数据,可读性差,人一般无法识别。说白了Pickle文件就是把数据转成二进制进行存储,是给机器看的不是给人看的。

    二,为什么用Pickle文件

    上述我们已经说过了pickle序列化后的数据是二进制,那也就是说把文件作为二进制存储后,对于文件的读取会非常的快。如果有一个每个sheets为上万行的Excel,当我们直接读取这个excel文件后果你懂得。。有的小伙伴可能会说转成csv后进行读取,是的转csv后确实会比之前的xlsx格式的读取来的快些。但是读取之前计算机依然需要编译后再读取。文件一大还是很慢。那么这时候Pickle的优点就显现出来了。

    三,如何转换Pickle文件

    注释:以下代码是通过jupyther来进行运行的。如果您使用的是.py的文件。那么if __name__ == "__main__": 这个入口函数请只写一个

              另外写了一个use_time的装饰器,为了测试每个函数运行后所话费的时间。

    #%%
    import pandas as pd
    from time import time
    
    def use_time(func):
        """
        :param func: 设置时间装饰器
        :return: 返回func函数及wrapper对象
        """
        def wrapper(*args,**kwargs):
            start = time()
            result = func(*args,**kwargs)
            use = round(time() - start,3) #保留3位
            print("%s()用时: %s秒" %(func.__name__,use))
            return result
        return wrapper
    
    @use_time
    def read_excel(fn):
        df =pd.read_excel(fn)
        return df
    
    @use_time
    def write_to_pickle(df,path):
        df.to_pickle(path)
    
    @use_time
    def read_pickle_file(fn):
        df = pd.read_pickle(fn)
        return df
    
    if __name__ == '__main__':
        file_path = R"C:UsersAdministratorPycharmProjectspython_BasicPandas_to_Excel20200721source_file按照班级分离文件.xlsx"
        
        #直接读取excel文件
        file01 = read_excel(file_path)
        print(file01)
        
        write_to_pickle(file01,R"C:UsersAdministratorPycharmProjectspython_BasicPandas_to_Excel20200727output_pickle.pkl")
    #%%
    if __name__ == '__main__':
        file02 = read_pickle_file(R"C:UsersAdministratorPycharmProjectspython_BasicPandas_to_Excel20200727output_pickle.pkl")
        print(file02)
    

    执行read_excel函数的用时:

    执行write_to_pickle函数的用时:

    执行read_pickle_file函数的用时:

    上述脚本运用过后的时间可以看出,转pickle文件后再读取所话费的时间是没有转之前读取的好几倍。我的数据量只有226行所以看不太出效果。如果数据量很大的情况下效果就很显著了。所以当我们读取Excel,csv等数据量比较的的表格文件时,建议转pickle文件后再读取。

  • 相关阅读:
    什么是内部类
    "=="和equals方法究竟有什么区别?
    SWFUpload乱码问题的解决
    xStream转换XML、JSON
    Java文件下载
    笔记摘录
    Javascript 函数传参问题
    JQUERY伸缩导航
    ruby关于flip-flop理解上一个注意点
    ruby 使用Struct场景
  • 原文地址:https://www.cnblogs.com/liupengpengg/p/13395637.html
Copyright © 2011-2022 走看看