如何保存耗时生成的NumPy数组,避免重复执行提取代码?
解决方法:保存NumPy数组以复用
核心思路
首次生成tablesSys数组后,将其保存到本地文件;后续只需从文件加载数组,无需重复执行耗时的PDF提取操作。
方法一:使用NumPy原生保存/加载(推荐)
NumPy自带的np.save()和np.load()专门针对NumPy数组优化,效率高且使用简单。
1. 首次生成并保存数组
在现有代码后添加保存逻辑:
import numpy as np import camelot as cam # 原PDF提取代码(仅需执行一次) tablesSys = cam.read_pdf("840Dsl_sysvar_lists_man_0122_de-DE_wichtig.pdf", pages = "667-795", process_threads = 100000, line_scale = 100, strip_text ='.\n' ) tablesSys = np.array(tablesSys) # 保存数组到本地文件 np.save("tablesSys.npy", tablesSys)
2. 后续直接加载数组
替换原PDF提取代码,直接加载保存好的数组:
import numpy as np # 直接从文件加载数组,无需再跑PDF提取 tablesSys = np.load("tablesSys.npy")
方法二:使用Pickle保存(支持任意Python对象)
如果需要保存包含数组的复杂对象,可使用Python标准库pickle:
1. 首次保存
import pickle # 生成数组后执行保存 with open("tablesSys.pkl", "wb") as f: pickle.dump(tablesSys, f)
2. 后续加载
import pickle with open("tablesSys.pkl", "rb") as f: tablesSys = pickle.load(f)
方法三:使用Joblib(适合超大数组)
若数组体积较大,joblib的压缩效率更优:
# 安装joblib(首次使用需执行) # !pip install joblib import joblib # 保存 joblib.dump(tablesSys, "tablesSys.joblib") # 加载 tablesSys = joblib.load("tablesSys.joblib")
自动化判断(可选)
添加文件存在判断,实现“自动检查-无文件则生成并保存,有文件则直接加载”:
import numpy as np import camelot as cam import os save_path = "tablesSys.npy" if os.path.exists(save_path): # 文件存在,直接加载 tablesSys = np.load(save_path) else: # 文件不存在,生成并保存 tablesSys = cam.read_pdf("840Dsl_sysvar_lists_man_0122_de-DE_wichtig.pdf", pages = "667-795", process_threads = 100000, line_scale = 100, strip_text ='.\n' ) tablesSys = np.array(tablesSys) np.save(save_path, tablesSys)
内容的提问来源于stack exchange,提问作者Rebecka
相关产品推荐
相关产品推荐

