【可定制、转换时间戳】解析nc文件,并保存为csv文件

写在最前面

愿称之为:支持私人订制、非常完美的版本
请添加图片描述
参考:
解析部分参考:
https://blog.csdn.net/qq_40105563/article/details/119871620
时间换算参考:
https://blog.csdn.net/weixin_51015047/article/details/122571396
{不规则时间}:
https://blog.csdn.net/weixin_43646592/article/details/113427937
写入csv文件参考:
https://blog.csdn.net/Cqh__/article/details/109750908

解析nc文件(代码汇总放最后面)

方便后续代码调整

读取nc文件

不清楚原因,xarray库读取有问题,只能用netCDF4库
在这里插入图片描述

获取气象文件中所有变量

在这里插入图片描述

解析时间

在这里插入图片描述

生成的real_time是一个numpy数组,数组中嵌套的是datetime对象

在这里插入图片描述
从1800年开始的,网上部分代码是从1900年开始的

在这里插入图片描述
将数据转化为字符串形式
注意:由于这个数据都是每个月1日,所以只用保存年/月格式的数据即可
如果需要保存年/月/日格式的数据,代码可改成:

data0 = str(real_time[i].year)+"/"+str(real_time[i].month)+str(real_time[i].day)

年月日时分秒,以此类推

解析部分代码汇总

import netCDF4
from netCDF4 import Dataset
dir = r'sst.mnmean.nc' # 替换为自己的nc文件
nc = Dataset(dir)

# 获取气象文件中所有变量
vars=nc.variables.keys()

#取出各variable的数据看看,数据格式为numpy数组
for var in vars:
    #读取每个变量的值
    var_data=nc.variables[var][:].data
    print(var,var_data.shape)

time = nc.variables['time']  # 读取时间
real_time = netCDF4.num2date(time,time.units)
print(real_time)

#查看一下time的属性
nc.variables['time']

time = nc.variables['time']  # 读取时间
real_time = netCDF4.num2date(time,time.units)
print(real_time)

print(real_time[0].year,real_time[0].month)
print(str(real_time[0].year)+"/"+str(real_time[0].month))

data = []
for i in range(len(real_time)):
    data0 = str(real_time[i].year)+"/"+str(real_time[i].month)
    data.append(data0)

print(data)

写入csv文件

from netCDF4 import Dataset
import csv

nc = Dataset('sst.mnmean.nc')
print(nc.variables.keys())

lat = nc.variables['lat'][:]
lon = nc.variables['lon'][:]
sst = nc.variables['sst'][:]

time = nc.variables['time']  # 读取时间
# 将时间转化格式:cftime.DatetimeGregorian(1854, 1, 1, 0, 0, 0, 0, has_year_zero=False)
real_time = netCDF4.num2date(time,time.units)
print(real_time)
# 将时间转化格式:['1854/1', '1854/2', '1854/3', '1854/4', '1854/5', '1854/6', '1854/7']
data = []
for i in range(len(real_time)):
    data0 = str(real_time[i].year)+"/"+str(real_time[i].month)
    data.append(data0)
print(data)

# def getDate(num):
#     y = 1801 + num/12
#     m = 1 + num % 12
#     return "%(year)d-%(month)02d"%{'year':y,'month':m}

with open('New_nc v2.0版本.csv', 'a', newline='') as fp:
    writer = csv.writer(fp, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
    writer.writerow(['time', 'lat', 'lon', 'sst'])
    # 输入经纬度的维数
    for i in range(len(data)):
        for j in range(len(lat)):
            for k in range(len(lon)):
                if str(sst[i][j][k]) not in '--':
                    writer.writerow([data[i], lat[j], lon[k], sst[ i, j, k]])

完结✿✿ヽ(°▽°)ノ✿

猜你喜欢

转载自blog.csdn.net/wtyuong/article/details/132781891