windows下没有api可以直接读grib或者grib2的数据。所以下载wgrib或者wgrib2来读grib数据。wgrib可以读grib1格式(.grb)的数据,wgrib2可以读grib2格式(.grib)的数据,根据不同格式的数据选择下载wgrib或者wgrib2
wgrib和wgrib2是不需要安装的,只需要在环境变量里进行设置。
右键此电脑,点击属性
点击高级系统设置
点击环境变量
在系统变量里找到Path,点击编辑
点击新建,然后把wgrib和wgrib2的路径输入进去
同时按下windows和R键,输入cmd,点击确定
输入wgrib2
显示出wgrib2的使用说明,说明设置成功
-else else else
-elseif_fs elif X elseif X (fixed string) conditional execution
-elseif_n elif X elseif (inv numbers in range), X=(start:end:step)
-elseif_rec elif X elseif (record numbers in range), X=(start:end:step)
-elseif_reg elif X elseif rpn registers defined, X = A, A:B, A:B:C, etc A = register number
-elseif elif X elseif X (POSIX regular expression) conditional on match
-endif endif endif
-if if X if X (POSIX regular expression), conditional execution on match
-if_fs if X if X (fixed string), conditional execution on match
-if_n if X if (inv numbers in range), X=(start:end:step)
-if_rec if X if (record numbers in range), X=(start:end:step)
-if_reg if X if rpn registers defined, X = A, A:B, A:B:C, etc A = register number
-not_if if X not_if X (regular expression), conditional execution on not match
-not_if_fs if X if X (fixed string) does not match, conditional execution up to next output/fi
-0xSec inv X Hex dump of section X (0..8)
-aerosol_size inv optical properties of an aerosol
-aerosol_wavelength inv optical properties of an aerosol
-bitmap inv bitmap mode
-center inv center
-checksum inv X CRC checksum of section X (0..8), whole message (X = -1/message) or (X=data)
-disc inv discipline (code table 0.0)
-domain inv find rectangular domain for g2ctl/GrADS plots
-end_ft inv verf time = reference_time + forecast_time + stat. proc time (YYYYMMDDHH) (same as -vt)
-end_FT inv verf time = reference_time + forecast_time + stat. proc time (YYYYMMDDHHMMSS) (same as -VT)
-ens inv ensemble information
-ext_name inv extended name, var+qualifiers
-ftime inv either ftime1 or ftime2 dep on version_ftime
-ftime1 inv forecast time
-ftime2 inv timestamp -- will replace -ftime in the future TESTING
-ftn_api_fn0 inv n npnts nx ny msg_no submsg i11,5(1x,i11)
-full_name inv extended name, var+qualifiers
-gdt inv contents of Grid Definition Template (g2c)
-get_byte inv X Y Z get bytes in Section X, Octet Y, number of bytes Z (decimal format)
-get_hex inv X Y Z get bytes in Section X, Octet Y, number of bytes Z (bytes in hexadecimal format)
-get_ieee inv X Y Z get ieee float in Section X, Octet Y, number of floats Z
-get_int inv X Y Z get 4-byte ints in Section X, Octet Y, number of ints Z
-get_int2 inv X Y Z get 2-byte ints in Section X, Octet Y, number of ints Z
-grib_max_bits inv maximum bits used in grib encoding
-grid inv grid definition
-grid_id inv show values from grid_id
-hybrid inv shows vertical coordinate parameters from Sec4
-ij inv X Y value of field at grid(X,Y) X=1,..,nx Y=1,..,ny (WxText enabled)
-ijlat inv X Y lat,lon and grid value at grid(X,Y) X=1,..,nx Y=1,..,ny (WxText enabled)
-ilat inv X lat,lon and grid value at Xth grid point, X=1,..,npnts (WxText enabled)
-JMA inv inventory for JMA locally defined PDT
-lev inv level (code table 4.5)
-ll2i inv X Y x=lon y=lat, converts to (i), 1..ndata
-ll2ij inv X Y x=lon y=lat, converts lon-lat to (i,j) using gctpc
-lon inv X Y value at grid point nearest lon=X lat=Y (WxText enabled)
-match_inv inv inventory used by -match, -not, -if and -not_if
-Match_inv inv same as -match_inv except d=YYYYMMDDHH <-> D=YYYYMMDDHHmmss
-max inv print maximum value
-min inv print minimum value
-misc inv variable name qualifiers like chemical, ensemble, probability, etc
-MM inv reference time MM
-model_version_date inv prints model date code
-n inv prints out inventory number
-N_ens inv number of ensemble members
-nl inv inserts new line into inventory
-nlons inv number of longitudes for each latitude
-npts inv number of grid points
-nxny inv nx and ny of grid
-packing inv shows the packing mode (use -v for more details)
-pdt inv Product Definition Table (Code Table 4.0)
-precision inv precision of packing
-print inv X inserts string (X) into inventory
-prob inv probability information
-process inv Process (code table 4.3)
-processid inv process id (locally defined)
-proj4_ij2ll inv X Y X=x Y=y, converts to (i,j) to lon-lat using proj.4 (experimental) we:sn
-proj4_ll2i inv X Y x=lon y=lat, converts to (i) using proj.4 (experimental) 1..ndata
-proj4_ll2ij inv X Y x=lon y=lat, converts lon-lat (i,j) using proj.4 (experimental)
-radius inv radius of Earth
-range inv print out location of record in bytes, 0 = first byte
-RT inv type of reference Time
-s inv simple inventory
-S inv simple inventory with minutes and seconds (subject to change)
-s2 inv simple inventory .. for testing ftime2
-scale inv scale for packing
-scaling inv scaling for packing (old format)
-scan inv scan order of grid
-Sec_len inv length of various grib sections
-Sec0 inv contents of section0
-Sec3 inv contents of section 3 (Grid Definition Section)
-Sec4 inv Sec 4 values (Product definition section)
-Sec5 inv Sec 5 values (Data representation section)
-Sec6 inv show bit-map section
-spatial_proc inv show spacial processing, pdt=4.15
-spectral_bands inv spectral bands for satellite, pdt=4.31 or 4.32
-start_ft inv verf time = reference_time + forecast_time (YYYYMMDDHH) : no stat. proc time
-start_FT inv verf time = reference_time + forecast_time (YYYYMMDDHHMMSS) - no stat. proc time
-stats inv statistical summary of data values
-subcenter inv subcenter
-t inv reference time YYYYMMDDHH, -v2 for alt format
-T inv reference time YYYYMMDDHHMMSS
-table inv parameter table
-timer inv reads OpenMP timer
-unix_time inv print unix timestamp for rt & vt
-V inv diagnostic output
-var inv short variable name
-varX inv raw variable name - discipline mastertab localtab center parmcat parmnum
-vector_dir inv grid or earth relative winds
-verf inv simple inventory using verification time
-vt inv verf time = reference_time + forecast_time, -v2 for alt format
-VT inv verf time = reference_time + forecast_time (YYYYMMDDHHMMSS)
-warn_old_g2 inv warn if old g2lib would have problem
-wave_partition inv ocean surface wave partition (pdt=4.52)
-YY inv reference time YYYY
-inv_f77 inv> X Y Z match inventory written to Z with character*(Y) and X=(bin,ieee)
-last inv> X write last inv item to file X
-last0 inv> X write last inv item to beginning of file X
-nl_out inv> X write new line in file X
-print_out inv> X Y prints string (X) in file (Y)
-s_out inv> X simple inventory written to X
-big_endian misc sets ieee output to big endian (default is big endian)
-box_ave misc X Y Z box average X=odd integer (lon) Y=odd integer (lat) critical_weight
-colon misc X replace item deliminator (:) with X
-config misc shows the configuration
-count misc prints count, number times this -count was processed
-end misc stop after first (sub)message (save time)
-error_final misc X Y Z error if at end X=count Y=ne,eq,le,lt,gt,ge Z=integer
-fix_CFSv2_fcst misc X Y Z fixes CFSv2 monthly fcst X=daily or 00/06/12/18 Y=pert no. Z=number ens fcsts v1.0
-fix_ncep misc fix ncep PDT=8 headers produced by cnvgrib
-gctpc misc X X=0,1 use gctpc library (default=1)
-grid_changes misc prints number of grid changes
-grid_def misc read lon and lat data from grib file -- experimental
-h misc help, shows common options
-header misc f77 header or nx-ny header in text output (default)
-help misc X help [search string|all], -help all, shows all options
-ijundefine misc X Y Z sets grid point values to undefined X=(in-box|out-box) Y=ix0:ix1 Z=iy0:iy1 ix=(1..nx) iy=(1..ny)
-import_bin misc X read binary file (X) for data
-import_grib misc X read grib2 file (X) for data
-import_grib_fs misc X Y read grib2 file (Y) sequentially for record that matches X (fixed string)
-import_ieee misc X read ieee file (X) for data
-import_netcdf misc X Y Z TESTING X=file Y=var Z=hyper-cube specification
-import_text misc X read text file (X) for data
-limit misc X stops after X fields decoded
-little_endian misc sets ieee output to little endian (default is big endian)
-mem_del misc X delete mem file X
-mem_final misc X Y write mem file X to file Y at cleanup step
-mem_init misc X Y read mem file X from file Y (on initialization)
-ndate misc X Y X=date Y=dt print date + dt
-ndates misc X Y Z X=date0 Y=(date1|dt1) Z=dt2 for (date=date0; date<(date1|date0+dt1); date+=dt2) print date
-ndates_fmt misc X X = C format for ndates option
-new_grid_interpolation misc X new_grid interpolation X=bilinear,bicubic,neighbor,budget
-new_grid_ipopt misc X new_grid ipopt values X=i1:i2..:iN N <= 20
-new_grid_vectors misc X change fields to vector interpolate: X=none,default,UGRD:VGRD,(U:V list)
-new_grid_winds misc X new_grid wind orientation: X = grid, earth (no default)
-no_header misc no f77 header or nx-ny header in text output
-proj4 misc X X=0,1 use proj4 library for geolocation (testing)
-rewind_final misc X rewinds file X on cleanup step if already opened, CW2
-rewind_proc misc X rewinds file X on processing step if already opened, CW2
-rpn misc X reverse polish notation calculator
-rpn_rcl misc X data = register X .. same as -rpn rcl_X .. no geolocation calc needed
-rpn_sto misc X register X = data.. same as -rpn sto_X .. no geolocation calc needed
-scaling_0001 misc changes scaling testing (sample)
-set misc X Y set X = Y, X=local_table,etc (help: -set help help)
-set_ave misc X set ave/acc .. only use on pdt=4.0/4.8 (old code)
-set_bin_prec misc X X use X bits and ECMWF-style grib encoding
-set_bitmap misc X use bitmap when creating complex packed files X=1/0
-set_byte misc X Y Z set bytes in Section X, Octet Y, bytes Z (a|a:b:c)
-set_date misc X changes date code, X=(+|-)N(hr|dy|mo|yr), YYYYMMDDHHmmSS
-set_ens_num misc X Y Z convert PDT 0,1 -> 1, 8,11 -> 11, X=code table 4.6 Y=pert num Z=num ens members -1=No Change
-set_ensm_derived_fcst misc X Y convert PDT 0,1,2 -> 2, 8,11,12 -> 12, X=code table 4.7 Y=num ens members
-set_ftime misc X either set_ftime1 or set_ftime2 dep on version_ftime
-set_ftime1 misc X set ftime
-set_ftime2 misc X set ftime2 .. will be replace -set_ftime/ave in the future -- TESTING ---
-set_grib_max_bits misc X sets scaling so number of bits does not exceed N in (new) grib output
-set_grib_type misc X set grib type = jpeg, simple, ieee, complex(1|2|3), aec, same
-set_hex misc X Y Z set bytes in Section X, Octet Y, bytes Z (a|a:b:c|abc) in hexadecimal
-set_ieee misc X Y Z set ieee float in Section X, Octet Y, floats Z (a|a:b:c)
-set_ijval misc X Y Z sets grid point value X=ix Y=iy Z=val
-set_int misc X Y Z set 4-byte ints in Section X, Octet Y, signed integers Z (a|a:b:c)
-set_int2 misc X Y Z set 2-byte ints in Section X, Octet Y, signed integers Z (a|a:b:c)
-set_ival misc X Y sets grid point value X=i1:i2:.. Y=va1:val2:.. grid[i1] = val1,etc
-set_lev misc X changes level code .. not complete
-set_metadata misc X read meta-data for grib writing from file X
-set_metadata_str misc X X = metadata string
-set_pdt misc X makes new pdt, X=(+)PDT_number or X=(+)PDT_number:size of PDT in octets, +=copy metadata
-set_percentile misc X convert PDT 0..6 -> 6, 8..15 -> 10, X=percentile (0..100)
-set_prob misc 5 args X/Y forecasts Z=Code Table 4.9 A=lower limit B=upper limit
-set_radius misc X set radius of Earth X= 0,2,4,5,6,8,9 (Code Table 3.2), 1:radius , 7:major:minor
-set_scaling misc X Y set decimal scaling=X/same binary scaling=Y/same new grib messages
-set_sec_size misc X Y resizes section , X=section number, Y=size in octets, DANGEROUS
-set_ts_dates misc X Y Z changes date code for time series X=YYYYMMDDHH(mmss) Y=dtime Z=#msgs/date
-set_var misc X changes variable name
-start_timer misc starts OpenMP timer
-status misc X X X=file
-submsg misc X process submessage X (0=process all messages)
-sys misc X run system/shell command, X=shell command
-text_col misc X number of columns on text output
-text_fmt misc X format for text output (C)
-udf misc X Y run UDF, X=program+optional_args, Y=return file
-udf_arg misc X Y add grib-data to UDF argument file, X=file Y=name
-undefine misc X Y Z sets grid point values to undefined X=(in-box|out-box) Y=lon0:lon1 Z=lat0:lat1
-undefine_val misc X grid point set to undefined if X=val or X=low:high
-v misc verbose (v=1)
-v0 misc not verbose (v=0)
-v2 misc really verbose (v=2)
-version misc print version
--version misc print version
-AAIG out writes Ascii ArcInfo Grid file, lat-lon grid only (alpha)
-AAIGlong out writes Ascii ArcInfo Grid file, lat-lon grid only long-name *.asc (alpha)
-ave out X Y average X=time step Y=output v2
-ave_var out X Y average/std dev/min/max X=time step, Y=output
-ave0 out X Y average X=time step, Y=output grib file needs file is special order
-bin out X write binary data to X
-cress_lola out X..Z,A lon-lat grid values X=lon0:nlon:dlon Y=lat0:nlat:dlat Z=file A=radius1:radius2:..:radiusN
-csv out X make comma separated file, X=file (WxText enabled)
-csv_long out X make comma separated file, X=file (WxText enabled)
-cubeface2global out X Y write faces X as global cubed grid to Y: X=list of faces to exclude
-ens_processing out X Y ave/min/max/spread X=output Y=future use
-fcst_ave out X Y average X=time step Y=output v2
-fcst_ave0 out X Y average X=time step, Y=output grib file needs file is special order
-fi out depreceated
-grib out X writes GRIB record (one submessage) to X
-GRIB out X writes entire GRIB record (all submessages)
-grib_ieee out X writes data[] to X.grb, X.head, X.tail, and X.h
-grib_out out X writes decoded/modified data in grib-2 format to file X
-grib_out_irr out X Y writes irregular grid grib (GDT=130 not adopted) X=(all|defined) Y=(output file)
-grib_out_irr2 out 5 args writes irregular grid grib GDT 101 X=npnts Y=grid_no Z=grid_ref A=UUID B=(output file)
-gridout out X text file with grid: i j lat lon (1st record)
-ieee out X write (default:big-endian) IEEE data to X
-ijbox out X..Z,A grid values in bounding box X=i1:i2[:di] Y=j1:j2[:dj] Z=file A=[bin|text|spread]
-ijsmall_grib out X Y Z make small domain grib file X=ix0:ix1 Y=iy0:iy1 Z=file
-irr_grid out X Y Z make irregular grid (GDT=130 not adopted), nearest neighbor, X=lon-lat list Y=radius (km) Z=output grib file
-lola out X..Z,A lon-lat grid values X=lon0:nlon:dlon Y=lat0:nlat:dlat Z=file A=[bin|text|spread|grib]
-merge_fcst out X Y merge forecast ave/acc/min/max X=number to intervals to merge (0=every) Y=output grib file
-mysql out 5 args H=[host] U=[user] P=[password] D=[db] T=[table]
-mysql_dump out 7 args H=[host] U=[user] P=[password] D=[db] T=[table] W=[western_lons:0|1] PV=[remove unlikely:0|1]
-mysql_speed out 7 args H=[host] U=[user] P=[password] D=[db] T=[table] W=[western_lons:0|1] PV=[remove unlikely:0|1]
-ncep_norm out X normalize NCEP-type ave/acc X=output grib file
-ncep_uv out X combine U and V fields into one message like NCEP operations
-netcdf out X write netcdf data to X
-new_grid out X..Z,A bilinear interpolate: X=projection Y=x0:nx:dx Z=y0:ny:dy A=grib_file alpha
-reduced_gaussian_grid out X Y Z reduced Gaussian grid, X=outputfile Y=-1 Z=(neighbor|linear)[-extrapolate]
-small_grib out X Y Z make small domain grib file X=lonW:lonE Y=latS:latN Z=file
-spread out X write text - spread sheet format into X (WxText enabled)
-submsg_uv out X combine vector fields into one message
-text out X write text data into X
-time_processing out X..Z,A average X=CodeTable 4.10 Y=CodeTable 4.11 Z=time step A=output
-tosubmsg out X convert GRIB message to submessage and write to file X
-wind_dir out X calculate wind direction, X = output gribfile (direction in degrees, 0=wind from north, 90=wind from east)
-wind_speed out X calculate wind speed, X = output gribfile (U then V in datafile)
-wind_uv out X calculate UGRD/VGRD from speed/dir, X = output gribfile
-alarm init X terminate after X seconds
-append init append mode, write to existing output files
-crlf init make the end of the inventory a crlf (windows) instead of newline (unix)
-d init X dump message X (n or n.m), only 1 -d allowed
-egrep init X egrep X | wgrib2 (X is POSIX regular expression)
-egrep_v init X egrep -v X | wgrib2 (X is POSIX regular expression)
-eof_bin init X Y send (binary) integer to file upon EOF: X=file Y=integer
-eof_string init X Y send string to file upon EOF: X=file Y=string
-err_bin init X Y send (binary) integer to file upon err exit: X=file Y=integer
-err_string init X Y send string to file upon err exit: X=file Y=string
-fgrep init X fgrep X | wgrib2
-fgrep_v init X fgrep -v X | wgrib2
-fix_ncep_2 init ncep bug fix 2, probability observation < -ve number
-fix_ncep_3 init sets flag to fix ncep bug 3 (constant fields)
-fix_ncep_4 init fixes NCEP grib2 files where DX and DY are undefined
-for init X process record numbers in range, X=(start:end:step), only one -for allowed
-for_n init X process inv numbers in range, X=(start:end:step), only one -for allowed
-g2clib init X X=0/1/2 0=WMO std 1=emulate g2clib 2=use g2clib
-i init read Inventory from stdin
-i_file init X read Inventory from file
-inv init X write inventory to X
-match init X process data that matches X (POSIX regular expression)
-match_fs init X process data that matches X (fixed string)
-match_inv_add init X Y Z add new options to match_inventory
-nc_grads init require netcdf file to be grads v1.9b4 compatible (fixed time step only)
-nc_nlev init X netcdf, X = max LEV dimension for {TIME,LEV,LAT,LON} data
-nc_pack init X pack/check limits of all NEW input variables, X=min:max[:byte|short|float]
-nc_table init X X is conversion_to_netcdf_table file name
-nc_time init X netcdf, [[-]yyyymmddhhnnss]:[dt{s[ec]|m[in]|h[our]|d[ay]}], [-] is for time alignment only
-nc3 init use netcdf3 (classic)
-nc4 init use netcdf4 (compressed, controlled endianness etc)
-ncpu init X number of threads, default is environment variable OMP_NUM_THREADS/number of cpus
-no_append init not append mode, write to new output files (default)
-no_nc_grads init netcdf file may be not grads v1.9b4 compatible, variable time step
-no_nc_pack init no packing in netcdf for NEW variables
-no_nc_table init disable previously defined conversion_to_netcdf_table
-no_nc_time init netcdf, disable previously defined initial or relative date and time step
-not init X process data that does not match X (POSIX regular expression)
-not_fs init X process data that does not match X (fixed string)
-one_line init puts all on one line (makes into inventory format)
-order init X decoded data in X (raw|we:sn|we:ns) order, we:sn is default
-persistent init X makes file X persistent if already opened (default on open), CW2
-rewind_init init X rewinds file X on initialization if already opened, CW2
-set_ext_name init X X=0/1 extended name on/off
-set_regex init X set regex mode X = 0:extended regex (default) 1:pattern 2:extended regex & quote metacharacters
-set_version_ftime init X set version of ftime X=1, 2
-tigge init use modified-TIGGE grib table
-transient init X make file X transient, CW2
以上为wgrib2的使用说明
Inventory/diagnostic-output selections
-s/-v short/verbose inventory
-V diagnostic output (not inventory)
(none) regular inventory
Options
-PDS/-PDS10 print PDS in hex/decimal
-GDS/-GDS10 print GDS in hex/decimal
-verf print forecast verification time
-ncep_opn/-ncep_rean default T62 NCEP grib table
-4yr print year using 4 digits
-min print minutes
-ncep_ens ensemble info encoded in ncep format
Decoding GRIB selection
-d [record number|all] decode record number
-p [byte position] decode record at byte position
-i decode controlled by stdin (inventory list)
(none) no decoding
Options
-text/-ieee/-grib/-bin convert to text/ieee/grib/bin (default)
-nh/-h output will have no headers/headers (default)
-dwdgrib output dwd headers, grib (do not append)
-H output will include PDS and GDS (-bin/-ieee only)
-append append to output file
-o [file] output file name, 'dump' is default
Misc
-cmc [file] use NCEP tables for CMC (dangerous)
以上为wgrib的使用说明
wgrib和wgrib2大部分语句是通用的,有部分不一样,使用的时候请注意。
wgrib2 D:\\data.grib -v0
使用 -v0命令查看数据目录
拿到该数据时不确定里面有什么数据,通过 -v命令查看目录可以看到有一个表示属性的字段“SOIL_M”,土壤湿度,于是新建一个csv文件以SOIL_M作为字段名,使用 -match命令进行匹配
输入SOIL_M并保存为csv格式
wgrib2 D:\\data.grib -match ':SOIL_M' -csv D:\\abc.csv
使用 -match命令进行匹配, -csv命令将grib数据写入csv
注意wgrib没有 -csv命令,无法将数据直接写入csv
与SOIL_M匹配的数据就被写入csv文件了
如果有其他属性也可以匹配其他属性,如TMP温度
因为不知道怎么读表头,所以猜测前两列为时间,第三列表示土壤湿度,第四列表示测量说明,第五、六列为经纬度,第七列为土壤湿度。
import os
def re():
#转到wgrib2工具目录
os.chdir("D:\\wgrib2")
#读取目录
os.system("wgrib2 D:\\data.grib -v")
#匹配SOIL_M
os.system("wgrib2 D:\\data.grib -match ':SOIL_M' -csv D:\\abc.csv")
return None
if __name__ == "__main__":
re()