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文件后再读取。

  • 相关阅读:
    .NET Interop 工具集
    关于正弦波的算法
    Windows Phone 系列 本地数据存储
    Xaml cannot create an instance of “X”
    Windows Phone 系列 使用 MVVM绑定时无法获取当前值
    Windows Phone 系列 应用程序图标无法显示
    Windows Phone 系列 WPConnect无法上网的问题
    Windows Phone 系列 使用 Windows Phone 保存铃声任务
    WP7.5提交应用
    Windows Phone 系列 动态删除ObservableCollection
  • 原文地址:https://www.cnblogs.com/liupengpengg/p/13395637.html
Copyright © 2011-2022 走看看