【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:\Users\Administrator\PycharmProjects\python_Basic\Pandas_to_Excel\20200721\source_file\按照班級分離文件.xlsx"
    
    #直接讀取excel文件
    file01 = read_excel(file_path)
    print(file01)
    
    write_to_pickle(file01,R"C:\Users\Administrator\PycharmProjects\python_Basic\Pandas_to_Excel\20200727\output_pickle.pkl")
#%%
if __name__ == '__main__':
    file02 = read_pickle_file(R"C:\Users\Administrator\PycharmProjects\python_Basic\Pandas_to_Excel\20200727\output_pickle.pkl")
    print(file02)

 

執行read_excel函數的用時:

執行write_to_pickle函數的用時:

執行read_pickle_file函數的用時:

上述腳本運用過后的時間可以看出,轉pickle文件后再讀取所話費的時間是沒有轉之前讀取的好幾倍。我的數據量只有226行所以看不太出效果。如果數據量很大的情況下效果就很顯著了。所以當我們讀取Excel,csv等數據量比較的的表格文件時,建議轉pickle文件后再讀取。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM