一,什么是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文件后再讀取。