首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

h5py文件写入之——flush和update

编程知识
2024年07月29日 10:18

技术背景

在前面的一篇博客中,我们介绍过使用VMD可视化H5MD标准化格式的轨迹文件的方法。H5MD本质上就是一个有规范格式的hdf5二进制文件,本文主要介绍两个关于hdf5的内容更新操作。

写入和更新数据

我们通常使用到的一个功能就是,通过h5py.File函数来打开或者创建一个hdf5文件,然后用create_dataset在文件中创建表单,再持续的向表单中填写数据。那么如果要更新文件中的数据怎么办呢?操作逻辑是比较简单的,直接加载对应的表单并获取返回值,然后直接在返回值中更新数据内容即可。如下是一个代码示例:

import h5py  
import numpy as np  
import os

h5_name = 'example.h5'
if os.path.exists(h5_name):
    with h5py.File('example.h5', 'r+') as file:  
        dataset = file['my_dataset']  
        new_data = np.random.rand(dataset.shape[0])
        dataset[...] = new_data

else:
    # 创建一个新的HDF5文件  
    with h5py.File(h5_name, 'w') as f:  
        dset = f.create_dataset("my_dataset", (10,), dtype='f')  
        data = np.arange(10)  
        dset[...] = data  

这个代码分成了两个部分,如果在指定的目录下不存在这个hdf5文件,我们就首先创建一个hdf5文件,表单内容为1~10的数字(这里使用了一个VSCode中的插件加H5Web来对h5文件进行可视化):

如果在路径下已经存在对应的h5文件,则修改其中的表单内容。例如我们把上述的测试代码执行两次,那么我们得到的h5文件内容是这样的:

刷新文件

hdf5文件作为一个规范格式的二进制文件,有严格的完整性校验。那么就会产生一个问题,如果在写入的过程中进程被中断,那么这个hdf5文件就会损坏:

当然,如果是Ctrl+C手动停止进程,那我们是可以参考这篇博客的内容进行终止信号的监听和管理的。但问题是如果被系统kill -9强行终止,是没办法捕获相关信号的。所以这里有一个方案,是通过flush,对中间过程进行保存,案例如下:

import h5py  
import numpy as np  
import time

h5_name = 'example.h5'
# 创建一个新的HDF5文件  
with h5py.File(h5_name, 'w') as f:  
    dset = f.create_dataset("my_dataset", (10,), dtype='f')  
    data = np.arange(10)  
    dset[...] = data 
    new_data = np.random.rand(dset.shape[0])
    f.flush()
    time.sleep(30)
    dset[...] = new_data 

这个案例中我们sleep了30秒的时间,在这个期间内我们会在系统中kill -9把这个Python进程杀死。如果没有加上f.flush()这一行,就会出现上面那张图中的报错,意味着这个hdf5文件是损坏的。如果加上了这一行代码,那效果如下:

这里需要说明的是,hdf5文件损坏只会出现在第一次写入hdf5文件的时候。如果使用第一个章节中的r+模式进行二次写入,不会有文件损坏的问题。

总结概要

hdf5是一个在量子化学和分子动力学模拟中经常有可能被用到的一种数据存储格式,得益于其良好的压缩率和完整性校验,一定程度上保障了其数据/轨迹存储的可靠性。本文介绍了关于hdf5文件的两个操作:更新已有的hdf5文件中的数据内容,以及flush同步更新的方法。

版权声明

本文首发链接为:https://www.cnblogs.com/dechinphy/p/h5py-update.html

作者ID:DechinPhy

更多原著文章:https://www.cnblogs.com/dechinphy/

请博主喝咖啡:https://www.cnblogs.com/dechinphy/gallery/image/379634.html

参考文章

  1. https://arxiv.org/abs/1308.6382
From:https://www.cnblogs.com/dechinphy/p/18329449/h5py-update
本文地址: http://shuzixingkong.net/article/546
0评论
提交 加载更多评论
其他文章 基于Drone实现CI/CD【0到1架构系列】
CI/CD是持续性集成和持续性部署,简单来讲就是自动化构建和自动化部署。目前有很多集成方案,也有很多组装方案,只要能实现自动化构建出制品,再自动部署到生产环境就行。 目前很多源代码都集成了CI/CD功能,drone也是目前比较流行的一个方案,简单易用,高性能。 前提条件 已经使用Gitea部署作用源
基于Drone实现CI/CD【0到1架构系列】 基于Drone实现CI/CD【0到1架构系列】 基于Drone实现CI/CD【0到1架构系列】
Pulsar客户端消费模式揭秘:Go 语言实现 ZeroQueueConsumer
前段时间在 pulsar-client-go 社区里看到这么一个 issue: import "github.com/apache/pulsar-client-go/pulsar" client, err := pulsar.NewClient(pulsar.ClientOpti
Pulsar客户端消费模式揭秘:Go 语言实现 ZeroQueueConsumer Pulsar客户端消费模式揭秘:Go 语言实现 ZeroQueueConsumer Pulsar客户端消费模式揭秘:Go 语言实现 ZeroQueueConsumer
keycloak~为微信二维码添加动态kc认可的动态state
本实例将通过keycloak社区登录实现微信二维码的登录,并且二微码不是keycloak动态生成,而是通过微信提供的js生成的,在页面上直接输出的方式实现的。 动态state 在Keycloak中使用微信二维码登录时,state参数确实是由后端生成的,并且用于确保登录过程的安全性,防止CSRF攻击等
keycloak~为微信二维码添加动态kc认可的动态state
上周热点回顾(7.22-7.28)
热点随笔: · 周边上新,T恤上星:博客园T恤幸运闪系列,上架预售,上照预览 (博客园团队)· 强烈推荐!!!阿里旗下10款顶级开源项目 (程序员晓凡)· 给园子的会员送送优惠,和你的数据库聊聊天:会员权益「Chat2D
我们的前端开发逆天了!1 小时搞定了新网站,还跟我说 “不要钱”
大家好,我是程序员鱼皮。前段时间我们上线了一个新软件 剪切助手 ,并且针对该项目做了一个官网: 很多同学表示官网很好看,还好奇是怎么做的,其实这个网站的背后还有个有趣的小故事。。。 鱼皮:我们要做个官网,能下载应用就行,一周时间怎么样? 我们的前端开发 - 多喝热水同学:一周?太小瞧我了吧,1 小时
我们的前端开发逆天了!1 小时搞定了新网站,还跟我说 “不要钱” 我们的前端开发逆天了!1 小时搞定了新网站,还跟我说 “不要钱” 我们的前端开发逆天了!1 小时搞定了新网站,还跟我说 “不要钱”
搭建自动化 Web 页面性能检测系统 —— 部署篇
我们是袋鼠云数栈 UED 团队,致力于打造优秀的一站式数据中台产品。我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值。 本文作者:琉易 liuxianyu.cn 这一篇是系列文章: 搭建自动化 Web 页面性能检测系统 —— 设计篇 搭建自动化 Web 页面性能检测系统 —— 实现篇 作
搭建自动化 Web 页面性能检测系统 —— 部署篇 搭建自动化 Web 页面性能检测系统 —— 部署篇 搭建自动化 Web 页面性能检测系统 —— 部署篇
git篇-- Git在项目实操中常见的使用命令--02
Git是现代软件开发中不可或缺的版本控制工具。它能帮助开发者跟踪项目的所有变更,并与团队成员高效协作。本文将介绍一些在项目实操中常见的Git命令,帮助你更好地管理代码。 1. 初始化和配置 初始化仓库 在一个新的项目目录中,初始化Git仓库: git init 配置用户信息 在提交代码之前,需要配置
FindBugs质量管理
1. FindBugs是什么 FindBugs 是一个静态分析工具,它检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题。有了静态分析工具,就可以在不实际运行程序的情况对软件进行分析。 FindBugs就是对编译后的class进行扫描,以发现一些隐藏的bug。如果你拥