python -- 批量读取多个文件,并将每个文件中相同变量累加
python – 批量读取多个文件,并将每个文件中相同变量累加
情况描述
- 现有多个nc文件,位于同一个文件夹中,如下所示
- 每个文件中都有相同的变量,想要读取每个文件中的变量然后将其加起来
- 意思就是说:
文件1中的变量+文件2中的变量+文件3中的变量+....
解决思路
1、先将所有的文件名所包含的路径读取到一个list
2、对于list进行循环读取,读取每个文件中相同的变量
3、先打开第一个文件中的变量,将后续文件中的变量累加到第一个文件中命名的变量
4、将结果写入到新的nc文件中并进行保存
对于第一个步骤,读取一个目录下所有指定类型的文件,我们可以通过glob
函数来完成
对于第二个步骤,读取nc文件可以通过netcdf、xarray
(任选一个)来完成
对于第三个步骤,直接写个循环就完事了
最后一个步骤使用to_netcdf()
函数来完成
下面给出一个手把手的代码示例:
代码示例 – 以xarray库读取
1、导入库
import xarray as xr
import glob
2、读取所有文件
path = 'file_locate_path'
这里的路径,改为你自己文件所在的路径,注意在python中路径直接应该是反斜线/
例如我这里文件都在I盘下的ice
文件夹,关于批量读取文件的教程,可以看我之前分享的教程,非常详细了:
1、批量读取相同格式文件(多个文件夹/单个文件夹)—nc文件为例
2、批量处理nc文件-字符串拼接文件,有规律文件名
3、批量读取地转流速日资料绘制气候态年平均海表流场(填色为流速)
## 获得文件路径列表
path = r'I:/ice/'
file_list = glob.glob(path+'*nc')
读取完,如果你使用的是spyder这个编辑器的话,可以在变量栏中看到如下内容:
点开这个file_list
,(或者使用命令行的话,可以在命令行中输入file_list
),我这里,文件夹下一共有43
个文件:
就是上面这一个样子,每个文件的路径加上文件的名称,这一步就没问题啦~~
读取第一个文件的变量
打开第一个文件并读取变量
ds = xr.open_dataset(file_list[0])
可以简单看一下文件信息,以及变量名称,我们这里的变量名称为:icec
,这个变量包含3个维度,时间(time)、纬度(lat)、经度(lon)。可以发现,每个变量都有122个time。还是挺大的。
对于上一步不熟悉的的,可以看看我之前的一个读取nc的教程:
手把手教你读取nc文件
ps:
为了节省计算时间,我这里仅做展示,取43个文件中的前10个文件,以及每个变量的第一个时刻进行累加。参考的朋友们这一步可以跳过
file_list = file_list[0:10] # 取文件前10个为例
# 打开第一个文件并读取变量
ds = xr.open_dataset(file_list[0])
var_name = 'icec'
# 取变量的第一个时刻
temp_sum = ds[var_name][0]
循环打开剩余的文件进行累加
# 依次打开剩余文件并将temp变量累加到temp_sum中
for file in file_list[1:]:print(file)ds = xr.open_dataset(file)temp_sum += ds[var_name][0]
写入新的文件
# 将结果写入新的netCDF文件
temp_sum.to_netcdf('temp_sum.nc')
示例2-以netcdf库读取:
大致过程都类似,就不展示具体细节了,根据需要进行更改就行
import netCDF4 as ncpath = r'I:/ice/'
file_list = glob.glob(path+'*nc')
# 定义文件列表和变量名var_name = 'icec'# 打开第一个文件并读取变量
with nc.Dataset(file_list[0], 'r') as f:temp_sum = f.variables[var_name][:][0]# 依次打开剩余文件并将temp变量累加到temp_sum中
for file in file_list[1:]:with nc.Dataset(file, 'r') as f:temp_sum += f.variables[var_name][:][0]# 将结果写入新的netCDF文件
with nc.Dataset('temp_sum.nc', 'w') as f:# 创建一个新变量temp_sum_var = f.createVariable(var_name, temp_sum.dtype, ('time', 'lon', 'lat'))# 将累加结果写入变量temp_sum_var[:] = temp_sum
示例3–使用并行计算来加速计算过程
import dask.array as da
import dask.distributed as dd# 定义文件列表和变量名
## 获得文件路径列表
path = r'I:/ice/'
file_list = glob.glob(path+'*nc')file_list = file_list[0:10] # 取文件前10个为例# 创建Dask客户端
client = dd.Client()
var_name = 'icec'
# 使用Dask读取文件和变量
ds = xr.open_mfdataset(file_list, parallel=True)[var_name]# 将数据分块
chunks = {'time': len(ds.time)//40, 'lon': ds.lon.size, 'lat': ds.lat.size}
ds = ds.chunk(chunks)# 计算变量的累加和
temp_sum = da.sum(ds, axis=0)# 将结果写入新的netCDF文件
temp_sum.to_dataset(name=var_name).to_netcdf('temp_sum.nc')
相关文章:
python -- 批量读取多个文件,并将每个文件中相同变量累加
python – 批量读取多个文件,并将每个文件中相同变量累加 情况描述 现有多个nc文件,位于同一个文件夹中,如下所示每个文件中都有相同的变量,想要读取每个文件中的变量然后将其加起来意思就是说: 文件1中的变量文件2中…...
低代码开发流程是怎么样的?
低代码开发流程是怎么样的?现在很多文章都在下功夫宣传what(低代码是什么)、why(为什么要用低代码),但是很少有文章能够系统讨论how(怎么用低代码)的问题。 所以我花3天的时间准备了…...
任何时候都不要在 for 循环中删除 List 集合元素!!!
首先说结论:无论什么场景,都不要对List使用for循环的同时,删除List集合元素,因为这么做就是不对的。 阿里开发手册也明确说明禁止使用foreach删除、增加List元素。 正确删除元素的方式是使用迭代器(Iteratorÿ…...
koa+Vite+vue3+ts+pinia构建项目
一、 初始化构建项目 npm create vite myProject -- --template vue-ts 注:Vite 需要 Node.js 版本 14.18,16。然而,有些模板需要依赖更高的 Node 版本才能正常运行,当你的包管理器发出警告时,请注意升级你的 Node 版…...
k8s-yaml文件
文章目录一、K8S支持的文件格式1、yaml和json的主要区别2、YAML语言格式二、YAML1、查看 API 资源版本标签2、编写资源配置清单2.1 编写 nginx-test.yaml 资源配置清单2.2 创建资源对象2.3 查看创建的pod资源3、创建service服务对外提供访问并测试3.1 编写nginx-svc-test.yaml文…...
存储引擎
目录 ❤ MySQL存储引擎 什么是存储引擎? MySQL支持哪个存储引擎? ❤ 各种存储引擎的特性 概述 各种存储引擎的特性 各种搜索引擎介绍 ❤ 常用存储引擎及适用场景 ❤ 存储引擎在mysql中的使用 存储引擎相关sql语句 指定存储引擎建表 在建表时指定 在配置文件中…...
Go中 channel的使用
文章目录背景channel 简介使用说明声明发送和接受数据关闭channel使用示例背景 使用 sync 包和 context 包的工具可以实现多个协程之间互相协作, 但是没有一种很好的方式解决多个协程之间通信的问题. golang 作者 Rob Pike 说过一句话,不要通过共享内存来通信&…...
【C++】string OJ练习
文章目录1. 仅仅反转字母思路分析代码实现2. 字符串中的第一个唯一字符题目分析代码实现3. 《剑指offer》——替换空格解法一:寻找替换思路分析代码实现优化解法二:空间换时间思路分析代码实现4.字符串最后一个单词的长度思路分析代码实现5. 字符串相加思…...
进程间通信IPC
进程间通信IPC (InterProcess Communication) 一、进程间通信的概念 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据…...
操作系统-页面淘汰算法(下)-软件设计(二十六)
操作系统-PV操作(上)-软件设计(二十五)https://blog.csdn.net/ke1ying/article/details/129476031 存储管理-分区存储组织 问:计算机系统内存大小为128k,当前系统分配情况如图,那么作业4再次申…...
23种设计模式-责任链模式(Android开发实际应用场景介绍)
什么是责任链模式 责任链模式是一种行为型设计模式,它的核心思想是将请求从一系列处理者中传递,直到其中一个处理者能够处理它为止。在这个过程中,请求可以被任何一个处理者处理,也可以被拒绝,直到有一个处理者能够处…...
Socket+Select+Epoll笔记
讲到epoll,就必须了解Socket,上篇博客写了Socket的基本使用方法,步骤主要为创建一个socketsocket是进程之间通信的,那么进程通信如何找到这个socket呢?当然是端口号,所以socket就要和端口号进行绑定&#x…...
git查看最近修改的文件
git log --name-status 每次修改的文件列表, 显示状态 git log --name-only 每次修改的文件列表 git log --stat 每次修改的文件列表, 及文件修改的统计 git whatchanged 每次修改的文件列表 git whatchanged --stat 每次修改的文件列表, 及文件修改的统计 git show 显示最…...
【算法基础(四)】堆排序(二)
堆排序(二) 把数组从零开始连续的一段 完全二叉树 size i 左 son 2*11 i 右 son 2*12 父 (i-1) / 2 堆是完全二叉树,分为大根堆和小根堆 在完全二叉树里,每一棵子数最大的值是头节点的值,就是大根堆 同理&…...
C++类型转换
C语言的转换是在变量前加类型名进行转换的,比如double pi 3.14;int a (int) pi;对于指针也是如此double* dptr πint* iptr (int*)dptr;虽然c兼容了C语言的转型方式,但是也做了很多限制,比如向上类型转换,在c中建议使用…...
Keil MDK6要来了,将嵌入式软件开发水平带到新高度,支持跨平台(2023-03-11)
注:这个是MDK6,不是MDK5 AC6,属于下一代MDK视频版: https://www.bilibili.com/video/BV16s4y157WF Keil MDK6要来了,将嵌入式软件开发水平带到新高度,支持跨平台一年一度的全球顶级嵌入式会展Embedded Wor…...
蓝桥杯刷题第九天
题目描述本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。素数就是不能再进行等分的整数。比如7,11。而 9 不是素数,因为它可以平分为 3 等份。一般认为最小的素数是2,接着是 3,5&…...
a-tree-select 基本使用,下拉框高度和宽度设置、回显时滚动条定位解决。
目录一、基本使用1. 界面效果2. 代码实现3. 问题1:下拉框占满整个屏幕4. 问题4:菜单内容过长时,下拉菜单宽度无限变宽。二、数据回显、滚动条定位1. 界面效果2. 代码实现2.1 获取默认展开节点2.1.1 代码实现2.1.2 说明2.2 设置滚动条定位2.2.…...
【Linux】之nc命令(连接与扫描指定端口、监测服务端口的使用情况)解析、详解实例、邮件告警
🍁博主简介 🏅云计算领域优质创作者 🏅华为云开发者社区专家博主 🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入! 文章目录nc命令简介nc命令的安装nc命令语法格式…...
cdn简单配置
cdn配置域名接入CDN编辑CDN配置本地修改hosts文件,绕过公网解析域名接入CDN 添加CDN域名以及回源配置 编辑CDN配置 默认后端端口是80,如果测试发现无法访问,则可能是443或其它 如果域名在CDN后端有https强制跳转,后端端口一定是44…...
前端安全(自留)
目录XSS——跨站脚本常见解决CSRF ——跨站请求伪造常见解决XSS——跨站脚本 当目标站点在渲染html的过程中,遇到陌生的脚本指令执行。 攻击者通过在网站注入恶意脚本,使之在用户的浏览器上运行,从而盗取用户的信息如 cookie 等。 常见 解…...
零基础转行云计算可行吗
目前处于云年代,云计算运维工程师的工作远景还是十分广泛的。像是阿里云计算,滴滴,抖音等等互联网大厂目前都在使用云核算技能。 云计算运维工程师的薪资水平也十分可观。 运维工程师(Operations),在国内又称为运维开发工程师(Dev…...
【AcWing】蓝桥杯备赛-深度优先搜索-dfs(1)
目录 写在前面: 题目:92. 递归实现指数型枚举 - AcWing题库 读题: 输入格式: 输出格式: 数据范围: 输入样例: 输出样例: 解题思路: 代码: AC &…...
孩子免费就读|私企经理自费赴美国东海岸高校访学
私企U经理无文章无课题,出国访学除了为考察市场、拓宽人脉、提升履资外,另一个主要目的是带孩子在美国接受当地免费的公立中小学教育,并把访学目标学校定位在东海岸。最终其采纳了板凳费相对较低的佐治亚大学邀请函,签证时居然全家…...
前端面试hr经常会问的问题
文章目录前言1.自我介绍2.为什么你要离职?3.工作经历4.职业规划5.优点、缺点6.还有什么要问的总结前言 这里记录了一些面试中hr或者项目负责人经常会问的一些问题,可以提前参考参考,想想该怎么回答,为之后的面试做好准备…...
C动态数组
在实际项目中,我们经常与各式各样的数据打交道。 例如:我们处理的是学生的数据。 struct student {int id; // 学号char name[20]; // 姓名int gender; // 性别int mark; // 成绩 };学生数据使用一个结构体表示,该结构体拥有4个成员。分别为…...
【STL一】STL组件(容器、迭代器、算法)
【STL一】STL组件(容器、迭代器、算法)一、STL二、STL组件(component)1、stl六大组件2、C STL的13个头文件3、stl所有头文件三、容器(container)1、序列容器(Sequence container)——顺序容器2、关联容器&a…...
Java每日一练(20230312)
目录 1. 两数之和 II ★ 2. 反转链表 ★★ 3. 二叉树的层序遍历 II ★★★ 🌟 每日一练刷题专栏 C/C 每日一练 专栏 Python 每日一练 专栏 Java 每日一练 专栏 1. 两数之和 II 给定一个已按照 非递减顺序排列 的整数数组 numbers ,请你从数…...
Linux中sudo,su与su -命令的区别
前言 su命令就是切换用户的工具,怎么理解呢?比如我们以普通用户tom登录的,但要添加用户任务,执行useradd ,tom用户没有这个权限,而这个权限恰恰由root所拥有。解决办法无法有两个,一是退出tom用…...
归并排序有多简单?一幅图教你看懂【C语言】
目录 归并排序的递归实现 代码实现 归并排序的非递归实现 代码实现 归并排序的思想很简单——分治法。简单地说,归并排序的是将序列拆分成几段子序列,将每一段子序列分别进行排序,排好之后再将有序的子序列归并(有点像合并两…...
音乐网站的音乐怎么做/教育机构网站
IO编程 1.什么是IO? 回答: IO在计算机中指input/output,就是输入和输出。 2.什么需要用到IO? 回答: 我们知道程序和运行时数据是在内存中驻留,由cpu这个超快的计算核心来运行,涉及到数据交换的地方,通常是…...
爱网恋的男生/重庆网络seo
先说一下什么是Ucenter,顾名思义它是“用户中心”。UCenter是Com服务器enz旗下各个产品之间信息直接传递的一个桥梁,通过UCenter可以无缝整合Com服务器enz系列产品,实现用户的一站式登录以及社区其他数据的交互。Ucenter 通信基本过程如下:1.从用户xxx在某一应用程序…...
泉州网站建设泉州/山东关键词优化联系电话
本周主要复习了高数,感觉掌握了忘的比较快,所以在前几天主要是看了知识点,以及书上的例题,后几天就找了一些题做,物理在下周五考,中间的时间间隔较长,所以准备考完高数再复习。 而且上周的模拟考…...
东莞网络建站公司/深圳高端seo公司助力企业
一、什么是缓存雪崩 当缓存服务器宕机或者在某一个时间段大量缓存集中失效,这时所有的请求都直接查询后端数据库,给数据库造成极大的压力甚至是宕机,从而引起应用服务器雪崩。 二、缓存雪崩的解决方案 对于缓存服务宕机造成的缓存雪崩&…...
手机网站建设维护协议/不用流量的地图导航软件
在线课堂:https://www.100ask.net/index(课程观看) 论 坛:http://bbs.100ask.net/(学术答疑) 开 发 板:https://100ask.taobao.com/ (淘宝) https://weid…...
研发app大概要多少钱/百度代做seo排名
一、DDoS趋势的一些变化 从今年3月份起,世界上最大的DDoS攻击记录到了1.7 Tbps,是一个普通家庭带宽出口的数十万倍,几乎可以横扫互联网,作为一个生存了20年之久的古老攻击形式,我们看到了今年来DDoS攻击量成指数级攀升…...