import xarray as xr
import numpy as np
from metpy.units import units
def read_ASCII(file):
读取ASCII文件
:param file: 输入是f.readlines(),一个列表文件
:return: 还是一个列表文件
:功能:防止文件中间或者末尾有空行
file_tep = []
for j in range(len(file)):
if len(file[j].split()) != 0:
file_tep.append(file[j])
file = file_tep
return file
f = open(r'D:\CSDN/ascii示例数据.txt')
file = read_ASCII(f.readlines())
for num,value in enumerate(file):
value = value.split()
if len(value) != 0:
if num == 0:
cols = int(value[-1])
elif num == 1:
rows = int(value[-1])
elif num == 2:
s_lon = float(value[-1])
elif num == 3:
s_lat = float(value[-1])
elif num == 4:
cell_size = float(value[-1])
elif num == 5:
mask_value = float(value[-1])
print(cols,rows,s_lon,s_lat,cell_size,mask_value)
lat = np.arange(-90,90+0.1,2.5)[::-1]
lon = np.arange(0,360,2.5)
print(len(lat),len(lon))
print(lat,lon)
values_array = np.zeros((rows,cols))
f.seek(0)
n = 0
for num,value in enumerate(file):
value = value.split()
if len(value) != 0:
if num > 5:
for j in range(len(value)):
if float(value[j]) == mask_value:
value[j] = np.nan
else:
value[j] = float(value[j])
values_array[n,:] = value
n = n+1
f.close()
print(values_array)
ds = xr.Dataset()
ds['1000hPa气温'] = (('lat','lon'),values_array*units.degC)
ds.coords['lat'] = ('lat',lat)
ds.coords['lon'] = ('lon',lon)
ds.to_netcdf(r'D:\CSDN/ascii示例数据.nc')
下一期打算做一下如何直接使用ASCII文件生成TIF文件