日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

netCDF4 处理nc文件总结

發(fā)布時(shí)間:2023/12/13 综合教程 26 生活家
生活随笔 收集整理的這篇文章主要介紹了 netCDF4 处理nc文件总结 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
創(chuàng)建nc文件

# 數(shù)據(jù)類型包括:f4(32位浮點(diǎn)數(shù)),f8(64位浮點(diǎn)數(shù)),i1(8位符號(hào)整型),i2(16位符號(hào)整型),i4(32位符號(hào)整型),i8(64位符號(hào)整型),
# u1(8位無(wú)符號(hào)整型),u2(16位無(wú)符號(hào)整型),u4(32位無(wú)符號(hào)整型),u8(64位無(wú)符號(hào)整型),S1(單字符字符串)

with nc.Dataset(nc_name, 'w', format='NETCDF4') as fnc:
fnc.createDimension('lat', 3541) # 確定維度大小
fnc.createDimension('lon', 6165)
# 變量名 數(shù)據(jù)類型 維度大小
lat = fnc.createVariable('lat', 'f4', ('lat',)) # 創(chuàng)建變量
lat.long_name = "latitude" # 該變量的名稱
lat.units = "degrees_north" # 該變量的單位

lon = fnc.createVariable('lon', 'f4', ('lon',))
lon.long_name = "longitude"
lon.units = "degrees_east"
# 是否壓縮數(shù)據(jù) 壓縮級(jí)別(1-9級(jí)) 默認(rèn)初始填充值
alt = fnc.createVariable('alt', 'f4', ('lat', 'lon'), zlib=True, complevel=9, fill_value=-9999)
alt.long_name = 'height above sea level'
alt.coordinates = 'lat lon alt'
alt.units = 'meters'
alt.positive = 'up' # 高度的方向 up為向上

PRS = fnc.createVariable('PRS', 'short', ('lat', 'lon'), zlib=True, complevel=9, fill_value=-9999) # 氣壓
PRS.long_name = 'station pressure'
PRS.units = 'hPa'
PRS.missing_value = -9999 # 默認(rèn)缺測(cè)填充
PRS.coordinates = 'lat lon alt'
PRS.add_offset = np.float32(0.0) # 增加偏移
PRS.scale_factor = np.float32(0.1) # 比例偏移 實(shí)際值存入自動(dòng)擴(kuò)大10倍(除以0.1),取出自動(dòng)縮小10倍(乘以0.1)
PRS.valid_min = 5200 # 限制存入最小值 小于最小為缺測(cè)
PRS.valid_max = 10850 # 限制存入最大值 大于最大為缺測(cè)

# 給變量賦值 賦值的數(shù)據(jù)維度--必須和創(chuàng)建變量時(shí)指定的維度大小一致
fnc.variables['lat'][:] = np.arange(53.56, 18.16, -0.01)
fnc.variables['lon'][:] = np.arange(73.44, 135.09, 0.01)
fnc.variables['alt'][:] = np.array(data['alt'], dtype='float').reshape(3541, 6165)
fnc.variables['PRS'][:] = np.array(data['PRS'], dtype='float').reshape(3541, 6165)

fnc.author = 'ecoweather' # 創(chuàng)建文件作者
fnc.createdate = '%s' % datetime.datetime.now().strftime('%Y-%m-%d %H:%M') # 創(chuàng)建文件時(shí)間

創(chuàng)建有時(shí)間變量的nc文件
with nc.Dataset(nc_name, 'w', format='NETCDF4') as fnc:
    fnc.createDimension('time', 24)  # 確定維度大小
    fnc.createDimension('size', 10447)

    tt = fnc.createVariable('time', 'i4', 'time')
    tt.long_name = 'time'
    # 起始小時(shí)時(shí)間   它會(huì)自動(dòng)根據(jù)你賦值的數(shù)據(jù),從起始小時(shí)累加
    tt.units = 'hours since %s' % datetime.datetime.strptime(start_time, '%Y%m%d%H%M%S').strftime('%Y-%m-%d %H:%M:%S')
    # 日歷(公歷)
    tt.calendar = "gregorian"

    sta = fnc.createVariable('sta', 'i4', ('size',))  # 創(chuàng)建變量
    sta.coordinates = 'lat lon alt'
    sta.long_name = 'station number'  # 站號(hào)

    lat = fnc.createVariable('lat', 'f4', ('size',))
    lat.long_name = "latitude"
    lat.units = "degrees_north"

    lon = fnc.createVariable('lon', 'f4', ('size',))
    lon.long_name = "longitude"
    lon.units = "degrees_east"

    PRE_1m = fnc.createVariable('PRE_1m', 'f4', ('time', 'size'), zlib=True, complevel=9, fill_value=-9999)  # 一分鐘降水
    PRE_1m.long_name = 'precipitation of 1 min'
    PRE_1m.units = 'mm'
    PRE_1m.missing_value = -9999
    PRE_1m._CoordinateAxes = 'lat lon'

    fnc.variables['time'][:] = np.array([i for i in range(1, 25)])
    fnc.variables['sta'][:] = np.array(dictknn.index.tolist())
    fnc.variables['lat'][:] = np.array(dictknn['lat'].tolist())
    fnc.variables['lon'][:] = np.array(dictknn['lon'].tolist())
    fnc.variables['PRE_1m'][:] = np.array(data)
讀取nc文件
def read_nc(ncpath: str):
    print('讀取 nc 文件 %s' % ncpath)
    f = nc.Dataset(ncpath, 'r')
    # 獲取nc文件中的變量名
    var_key = list(f.variables.keys())
    var_len = f.variables['lat'][:].shape
    # print(var_key, var_len)
    # 創(chuàng)建DataFrame存放數(shù)據(jù),一列一類數(shù)據(jù)
    nc_data = pd.DataFrame(index=range(var_len[0]), columns=var_key[1:], dtype='short')
    for e in var_key:
# 獲取變量數(shù)據(jù) vardata = f.variables[e][:] size = vardata.shape # print('{}-{}'.format(e, size)) # (3541, 6165) 3541行,每行6165個(gè) if len(size) == 1: if e == 'sta': # nc_data[e] = vardata nc_data.index = vardata else: nc_data[e] = list(map(lambda s: float('%s' % s), vardata)) else: nc_data[e] = list(vardata) # print(f.variables) f.close() print(nc_data) return nc_data
創(chuàng)建群組
    with nc.Dataset(nc_name, 'w', format='NETCDF4') as fnc:

        # 創(chuàng)建一個(gè)群組
        group1 = fnc.createGroup('LatLon_1441X2880')
        group1.createDimension('lat', 1441)  # 確定維度大小
        group1.createDimension('lon', 2880)  # 確定維度大小

        lat1 = group1.createVariable('lat', 'f4', ('lat',), zlib=True, complevel=9, fill_value=-9999)
        lat1.units = "degrees_north"
        lon1 = group1.createVariable('lon', 'f4', ('lon',), zlib=True, complevel=9, fill_value=-9999)
        lon1.units = "degrees_east"
        group1.variables['lat'][:] = data[1441]['lat']
        group1.variables['lon'][:] = data[1441]['lon']
        for elem in data[1441]['value']:
            d = group1.createVariable(elem['name'], 'short', ('lat', 'lon'), zlib=True, complevel=9, fill_value=-9999)
            d.units = elem['units']
            d.missing_value = -9999
            d.add_offset = np.float32(0.0)
            d.scale_factor = np.float32(0.1)
            group1.variables[elem['name']][:] = elem['value']

        group1.close  # 關(guān)閉群組, 注意,這里沒(méi)有括號(hào)

        # 創(chuàng)建一個(gè)群組
        group2 = fnc.createGroup('LatLon_281X361')
        group2.createDimension('lat1', 281)  # 確定維度大小
        group2.createDimension('lon1', 361)  # 確定維度大小

        lat2 = group2.createVariable('lat', 'f4', ('lat1',), zlib=True, complevel=9, fill_value=-9999)
        lat2.units = "degrees_north"
        lon2 = group2.createVariable('lon', 'f4', ('lon1',), zlib=True, complevel=9, fill_value=-9999)
        lon2.units = "degrees_east"
        group2.variables['lat'][:] = data[281]['lat']
        group2.variables['lon'][:] = data[281]['lon']
        for elem in data[281]['value']:
            d = group2.createVariable(elem['name'], 'short', ('lat1', 'lon1'), zlib=True, complevel=9, fill_value=-9999)
            d.units = elem['units']
            d.missing_value = -9999
            d.add_offset = np.float32(0.0)
            d.scale_factor = np.float32(0.1)
            group2.variables[elem['name']][:] = elem['value']

        group2.close

        fnc.author = 'ecoweather'
        fnc.createdate = '%s' % datetime.datetime.now().strftime('%Y-%m-%d %H:%M')

總結(jié)

以上是生活随笔為你收集整理的netCDF4 处理nc文件总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。