!dir !cdo pardes air.sig995.2012.nc !cdo showyear air.sig995.2012.nc !cdo showmon air.sig995.2012.nc !cdo seasmean air.sig995.2012.nc air.sig995.2012_sm.nc !cdo sinfo air.sig995.2012_sm.nc !cdo sellonlatbox,0,90,30,70 air.sig995.2012_sm.nc air.sig995.2012_sm_europe.nc from scipy.io import netcdf import numpy f = netcdf.netcdf_file('air.sig995.2012_sm_europe.nc') f.variables air = f.variables['air'] lat = f.variables['lat'] lon = f.variables['lon'] time = f.variables['time'] air. airK = (air.data*air.scale_factor)+air.add_offset airK = (air[:]*air.scale_factor)+air.add_offset airC = airK-273.15 lat.shape lon.shape lons, lats = numpy.meshgrid(lon[:],lat[:]) time.units time[:][0] import datetime first_date = datetime.datetime(1,1,1,0,0,0) type(first_date) difference1 = datetime.timedelta(hours=(time[:][0]-48)) present = first_date+difference1 present.ctime() %pylab inline from mpl_toolkits.basemap import Basemap m = Basemap(llcrnrlon=-10,llcrnrlat=25,urcrnrlon=95,urcrnrlat=75,projection='mill', resolution='l') x, y = m(lons, lats) # Создаём рисунок и задаём его размеры fig = plt.figure(figsize=(10,10)) # Выбираем сезон season=2 # Рисуем береговую линию m.drawcoastlines(linewidth=1) # Рисуем границы стран m.drawcountries(linewidth=0.5) # Рисуем границу карты m.drawmapboundary # Создаём карту с залитыми изолинииями, 20 интервалов cs = m.contourf(x,y,airC[season,:,:],20) # Создаём легенду cbar = m.colorbar(cs,location='bottom',pad="5%") # Подписываем легенду cbar.set_label(r'$^{\circ}\mathrm{C}$') # Переводим время в человеческое difference1 = datetime.timedelta(hours=(time[:][season]-48)) present = first_date+difference1 # Отрисовываем заголовок plt.title(present.ctime()) #Цикл по времени for one_field in range(airC.shape[0]): #Открываем файл, дописываем к имени номер поля и нули, #чтобы при большом количестве файлов они нормально сортировались ofile = open("netcdf_to_ASCII_field_"+str(one_field).zfill(5)+".txt","w") #Переводим время в человесеский формат difference1 = datetime.timedelta(hours=(time[:][one_field]-48)) present = first_date+difference1 #Печатаем, чтобы видеть прогресс print(present.ctime()) #Цикл по строкам for nn in range(airC.shape[1]): #Цикл по столбцам for kk in range(airC.shape[2]): #Запись строки в файл. Сначала перечисляем форматы, #в которых будт выводиться переменные, а потом перечисляем #сами переменные ofile.write('%5.2f %5.2f %5.2f %5.0f %5.0f %5.0f\n' % \ (lons[nn,kk], lats[nn,kk], airC[one_field,nn,kk], present.day, present.month, present.year)) ofile.close() #Открывать будем только один файл ofile = open("netcdf_to_ASCII_all_fields.txt","w") #Цикл по времени for one_field in range(airC.shape[0]): #Переводим время в человесеский формат difference1 = datetime.timedelta(hours=(time[:][one_field]-48)) present = first_date+difference1 #Печатаем, чтобы видеть прогресс print(present.ctime()) #Записываем время в начале поля, #тут мы решили ещё и часы с минутами приписать ofile.write('%5.0f %5.0f %5.0f %5.0f %5.0f\n' % (present.day, present.month, present.year, present.hour, present.minute )) #Цикл по строкам for nn in range(airC.shape[1]): #Цикл по столбцам for kk in range(airC.shape[2]): #Запись строки в файл. Сначала перечисляем форматы, #в которых будт выводиться переменные, а потом перечисляем #сами переменные ofile.write('%5.2f %5.2f %5.2f\n' % \ (lons[nn,kk], lats[nn,kk], airC[one_field,nn,kk])) ofile.close()