news 2026/7/1 23:37:53

nc文件中的变量数据替换

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
nc文件中的变量数据替换

一、单个文件替换

cat replace_SingleFile.py import netCDF4 as nc import numpy as np file1 = '/public/home/acez11b6ht/apprepo/wrf_wps/4.5-intelmpi2017/app/WRF/test/em_real_202505/WRFOUT_T/wrfout_d01_2025-04-25_00:00:00' file2 = '/public/home/acez11b6ht/apprepo/wrf_wps/4.5-intelmpi2017/app/WRF/test/em_real_202404/WRFOUT/wrfout_d01_2024-03-26_00:00:00' ds1 = nc.Dataset(file1, 'r+') ds2 = nc.Dataset(file2, 'r') print(ds1.variables.keys()) print("file1 T2 shape:", ds1.variables['T2'].shape) print("file2 T2 shape:", ds2.variables['T2'].shape) print("file1 Times[0]:", b"".join(ds1.variables['Times'][0]).decode("ascii")) print("file2 Times[0]:", b"".join(ds2.variables['Times'][0]).decode("ascii")) if ds1.variables['T2'].shape != ds2.variables['T2'].shape: raise ValueError("T2 维度不一致,不能替换。") # 替换 src = ds2.variables['T2'][:].astype(np.float64) ds1.variables['T2'][:] = src ds1.sync() # 验证(读回 file1 的 T2 做差分) dst = ds1.variables['T2'][:].astype(np.float64) max_abs = np.max(np.abs(dst - src)) print("max_abs_diff(after write):", max_abs) ds1.close() ds2.close() if max_abs == 0.0: print("结论:替换成功(T2 完全一致)") else: print("结论:替换后仍存在差异(可能是精度/压缩/缺测导致)")

二、多个文件替换

cat replace_MultipleFiles.py import os import re import glob import netCDF4 as nc import numpy as np VAR = "T2" year_DST = 2025 year_SRC = 2024 month = 9 mm = f"{month:02d}" DST_DIR = f"/public/home/acez11b6ht/apprepo/wrf_wps/4.5-intelmpi2017/app/WRF/test/em_real_{year_DST}{month:02d}/WRFOUT_T" SRC_DIR = f"/public/home/acez11b6ht/apprepo/wrf_wps/4.5-intelmpi2017/app/WRF/test/em_real_{year_SRC}{month:02d}/WRFOUT" # 目标文件名:wrfout_d01_2025-04-25_00:00:00 PAT = re.compile(rf"^(wrfout_d01_){year_DST}-(\d{{2}}-\d{{2}}_\d{{2}}:\d{{2}}:\d{{2}})$") # 验证阈值:严格相等用 0.0;如担心浮点/压缩差异,可改 1e-6 VERIFY_TOL = 0.0 def replace_and_verify(dst_path, src_path): ds_dst = nc.Dataset(dst_path, "r+") ds_src = nc.Dataset(src_path, "r") # 基本检查 if VAR not in ds_dst.variables: ds_dst.close(); ds_src.close() return False, f"dst缺少{VAR}" if VAR not in ds_src.variables: ds_dst.close(); ds_src.close() return False, f"src缺少{VAR}" sh_dst = ds_dst.variables[VAR].shape sh_src = ds_src.variables[VAR].shape if sh_dst != sh_src: ds_dst.close(); ds_src.close() return False, f"{VAR}维度不一致 dst={sh_dst} src={sh_src}" # 读取源数据(float64 用于验证更稳) src_data = ds_src.variables[VAR][:].astype(np.float64) # 写入目标 ds_dst.variables[VAR][:] = src_data ds_dst.sync() # 读回目标用于验证 dst_data = ds_dst.variables[VAR][:].astype(np.float64) diff = dst_data - src_data absdiff = np.abs(diff) if np.all(np.isnan(absdiff)): max_abs = mean_abs = float("nan") else: max_abs = float(np.nanmax(absdiff)) mean_abs = float(np.nanmean(absdiff)) ds_dst.close() ds_src.close() ok = (max_abs <= VERIFY_TOL) msg = f" {VAR} verify max_abs={max_abs:.6g}, mean_abs={mean_abs:.6g}, tol={VERIFY_TOL}" return ok, msg def main(): dst_files = sorted(glob.glob(os.path.join(DST_DIR, f"wrfout_d01_{year_DST}-*"))) if not dst_files: print(f"未找到目标文件:{DST_DIR}/wrfout_d01_{year_DST}-*") return ok_cnt = skip_cnt = fail_cnt = 0 for idx, dst_path in enumerate(dst_files, start=1): dst_name = os.path.basename(dst_path) m = PAT.match(dst_name) if not m: print(f"[{idx}/{len(dst_files)}][SKIP] 文件名不符合预期格式:{dst_name}") skip_cnt += 1 continue prefix, rest = m.group(1), m.group(2) src_name = f"{prefix}{year_SRC}-{rest}" src_path = os.path.join(SRC_DIR, src_name) if not os.path.exists(src_path): print(f"[{idx}/{len(dst_files)}][SKIP] 源文件不存在:{src_name} (对应目标 {dst_name})") skip_cnt += 1 continue # 关键提示:正在处理哪个文件,用哪个文件替换 print(f"\n[{idx}/{len(dst_files)}] 正在处理:{dst_name}") print(f" 将 {dst_name} 的 {VAR} 替换为 {src_name} 的 {VAR}") try: ok, info = replace_and_verify(dst_path, src_path) if ok: print(f" [OK] 完成替换并验证通过:{info}") ok_cnt += 1 else: print(f" [FAIL] 已执行替换,但验证未通过:{info}") fail_cnt += 1 except Exception as e: print(f" [ERROR] 处理失败:{repr(e)}") fail_cnt += 1 print("\n====== 汇总 ======") print(f"成功: {ok_cnt}") print(f"跳过: {skip_cnt}") print(f"失败: {fail_cnt}") if __name__ == "__main__": main()

三、检查替换结果

cat check_replace.py import netCDF4 as nc import numpy as np file1 = "/public/home/acez11b6ht/apprepo/wrf_wps/4.5-intelmpi2017/app/WRF/test/em_real_202505/WRFOUT_T/wrfout_d01_2025-04-25_00:00:00" file2 = "/public/home/acez11b6ht/apprepo/wrf_wps/4.5-intelmpi2017/app/WRF/test/em_real_202405/WRFOUT/wrfout_d01_2024-04-25_00:00:00" d1 = nc.Dataset(file1, "r") d2 = nc.Dataset(file2, "r") t1 = d1.variables["T2"][:].astype(np.float64) t2 = d2.variables["T2"][:].astype(np.float64) diff = t1 - t2 max_abs = np.nanmax(np.abs(diff)) mean_abs = np.nanmean(np.abs(diff)) print("T2 shape file1:", t1.shape) print("T2 shape file2:", t2.shape) print("max_abs_diff:", max_abs) print("mean_abs_diff:", mean_abs) # 再给一个严格判定 if max_abs == 0.0: print("结论:替换成功(T2 完全一致)") else: print("结论:不完全一致(请检查是否替换的是同一时间序列/是否有缺测或精度差异)") d1.close() d2.close()
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/1 23:33:03

UI-TARS:让电脑真正成为你的智能助手

UI-TARS&#xff1a;让电脑真正成为你的智能助手 【免费下载链接】UI-TARS 项目地址: https://gitcode.com/GitHub_Trending/ui/UI-TARS 你是否曾经历过这样的时刻&#xff1f;每天清晨打开电脑&#xff0c;面对着一成不变的工作流程&#xff1a;登录邮箱、整理报表、填…

作者头像 李华
网站建设 2026/7/1 8:46:35

思源笔记终极性能优化指南:让你的知识库运行效率提升300%

思源笔记终极性能优化指南&#xff1a;让你的知识库运行效率提升300% 【免费下载链接】siyuan A privacy-first, self-hosted, fully open source personal knowledge management software, written in typescript and golang. 项目地址: https://gitcode.com/GitHub_Trendin…

作者头像 李华
网站建设 2026/7/1 0:36:09

Qwen3-4B模型冷启动优化:预加载机制部署提速实战

Qwen3-4B模型冷启动优化&#xff1a;预加载机制部署提速实战 1. 引言 在边缘设备和端侧场景中&#xff0c;大语言模型的部署面临显著的性能挑战&#xff0c;其中最影响用户体验的便是冷启动延迟。通义千问 3-4B-Instruct-2507&#xff08;Qwen3-4B-Instruct-2507&#xff09;…

作者头像 李华
网站建设 2026/7/1 8:46:36

保姆级教程:Docker部署RexUniNLU实现多标签文本分类

保姆级教程&#xff1a;Docker部署RexUniNLU实现多标签文本分类 &#x1f31f; 嗨&#xff0c;我是LucianaiB&#xff01; &#x1f30d; 总有人间一两风&#xff0c;填我十万八千梦。 &#x1f680; 路漫漫其修远兮&#xff0c;吾将上下而求索。 目录 1. 引言&#xff1a;为…

作者头像 李华
网站建设 2026/7/1 15:48:31

快速复制文件到工作区,避免路径错误踩坑

快速复制文件到工作区&#xff0c;避免路径错误踩坑 本文为实践应用类技术博客&#xff0c;聚焦于在“万物识别-中文-通用领域”镜像环境中高效、安全地将示例文件复制至工作区&#xff0c;并规避因路径配置不当导致的常见运行错误。通过系统化的操作流程、可执行代码和工程化…

作者头像 李华
网站建设 2026/7/1 21:43:46

FS25_AutoDrive 终极指南:如何实现农场全自动运营

FS25_AutoDrive 终极指南&#xff1a;如何实现农场全自动运营 【免费下载链接】FS25_AutoDrive FS25 version of the AutoDrive mod 项目地址: https://gitcode.com/gh_mirrors/fs/FS25_AutoDrive 还在为《模拟农场25》中繁琐的驾驶操作而烦恼吗&#xff1f;FS25_AutoDr…

作者头像 李华