【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函数的用时:

【python】python vs Excel ( 将Excel文件转pickle文件存储 )

执行write_to_pickle函数的用时:

【python】python vs Excel ( 将Excel文件转pickle文件存储 )

执行read_pickle_file函数的用时:

【python】python vs Excel ( 将Excel文件转pickle文件存储 )

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