IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 用npz文件对代码定点存储数据并读取 -> 正文阅读

[Python知识库]用npz文件对代码定点存储数据并读取

对于运行时间比较长的代码,每隔一定步长进行存储。

本来是想用python写日志的方式,后来看了一下好像和需求不一致。

这里是利用np.savez存储成numpy数据,数据类型是npz

import numpy as np
import os

# 新建存储文件夹,看起来整齐一些
file_path = os.path.join("file_path")
os.makedirs(file_path, exist_ok=True)


a = np.array([1, 2, 3])
b = np.array([1, 4, 5])

# ....存储条件判断达到后
name = "file_name.npz"
file_name = os.path.join(file_path, name)
np.savez(file_name, a=a, b=b)

在需要读取时

with np.load(file_name) as data:
    a = data["a"]
    b = data["b"]

# 也可以用下面的方式,读取的文件字典形式的

data = np.load(file_name)
a = data["a"]
b = data["b"]

探索出来的trick:

不止是numpy类型数据可以用这个方法存储,np对数据的兼容性很好。在用parser包输入参数时,也可以把参数批量的用这个方法存储到一个npz文件中,这时的参数。

import parser
import numpy as np

parser = argparse.ArgumentParser()
parser.add_argument('-n', default=1, type=int)
parser.add_argument('-pn', default=400, type=int)
    
args = parser.parse_args()

a=np.array([1,2,3])

# 设置存储条件和路径
np.savez(file_name, a=a, inf=args)

args本来是Namespace(n=1, pn=400),在存储时被作为object array。

恢复时可以直接用tolist()转,就是元素本身。(这个用tolist转换过就是原本的元素,还挺惊喜的)

data = np.load(file_name,allow_pickle=True)
inf = data['inf'].tolist()
inf.pn    # 输出400

说明:

用np.savez保存的文件是如果原文件存在就覆盖,对于这里是适用的,也就是随着运行不断更新最新的数据,丢掉之前的数据。

如果需要保存之前的数据,可以在name中加入步长等factor,这里需要格式和日期的一些运用命名。

格式命名详见?https://www.cnblogs.com/vamei/archive/2013/03/12/2954938.html

关于时间日期的time包?https://blog.csdn.net/shomy_liu/article/details/44141483

此外需要文件路径和文件操作的一些辅助,os包,详见https://www.jianshu.com/p/86f88b3d7efd

可能的报错:

  • 在读文件时如果有object 类型的文件,那么需要设置allow_pickle=True。否则会报错?

????????????????ValueError: Object arrays cannot be loaded when allow_pickle=False

  • 创建文件夹时安全的做法是用exist_ok:只有在目录不存在时创建目录,目录已存在时不会抛出异常。如果不加这个,在文件存在的情况下会报错:文件已存在
  • 在load数据时,file_name需要后面是带.npz的,否则就会找不到文件。但是存储的时候的file_name不带.npz会自动补充。不过尽量还是写全吧

详细的关于numpy文件读写的原文说明:https://numpy.org/doc/stable/reference/generated/numpy.savez.html

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-09-01 11:52:42  更:2021-09-01 11:55:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 13:03:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码