一个平凡的一天,想实现一个平凡而该死的功能:
在一个主文件夹中有许许多多的子文件夹(文件夹1,2,3,4 , , , n),每个子文件夹下都会存储一个nc文件(或多个),每天凌晨12:00呢又会更新子文件夹(子文件夹n+1)。能否每天都能将最后倒数七个子文件夹中的nc文件整合成一个nc(通过时间序列)呢?
于是开始为期多个小时的憋代码,作为一个编程小白来说,先想清楚逻辑段,将每个逻辑段实现,是唯一的方法:
逻辑段1:找到主文件夹,将里面的子文件夹的个数进行统计和列表
feature='XXX'
path = r'C:\........\XX'+'\\'+feature # 输入特定气体的文件夹地址
files = os.listdir(path) # 读入主文件夹
files.sort() #排序
x = len(files) # 统计主文件夹中的子文件夹个数(一天一更新)
逻辑段2:根据统计对最后7个子文件夹进行遍历,并对子文件夹中的nc文件集合在一起
file_all=[]
for file in files[x-7:]: #遍历主文件夹中倒数7个子文件夹
file_path = path + '\\' + file #对子文件夹进行路径调用
fn=os.path.join(file_path +'\\'+ file+'.nc')
#nc文件建议按照文件夹的名字命名(可按照如期)
file_all.append(fn) #将调用到的所有nc文件集合起来
逻辑段3:将集合起来的nc文件进行合并(根据时间序列)
nc_all=[]
for i in range(len(file_all)): #nc文件的个数
nc =xr.open_dataset(file_all[i])[f'{feature}']
#根据其变量进行调用
nc_all.append((nc))
data=xr.concat(nc_all,dim='time') #根据时间序列进行合并
最后:得到了一个完整的nc,那就可以进行存储,在命名的时候也可以以日期进行。
file1=files[0] #子文件夹中第一个和最后一个文件夹的名字
file2=files[6]
data_path = r'C:\。。。。\data'+'\\'+feature +'\\'+file1+'-'+file2+'.nc'
#得到的nc文件名字即为"file1-file2.nc"
data.to_netcdf(data_path) #输出合并后的nc文件,也就是data文件夹
这样就可以浅浅实现此功能了,可以对选中的时间序列的nc文件进行下一步的数据处理啦。