item[0] = item[0].replace( "C:\\\\Users\\\\Administrator\\\\Desktop\\\\MODIS\\\\HDF", "") item[0] = item[0].replace("\\", "") item[0] = item[0].replace(".hdf文件", "") item = np.array(item) aod_outcome_list_v2.append(item) #避免输出结果字符串省略,四行设置都需要 pd.set_option('display.max_rows', None) #行 pd.set_option('display.max_columns', 1000) #列 pd.set_option('display.width', 1000) pd.set_option('display.max_colwidth', 1000) #AOD结果写入TXT aod_outcome_list_v2 = pd.DataFrame(aod_outcome_list_v2) aod_outcome_list_v2.columns = ['日期', '监测站', 'AOD值'] file = open('data.txt', 'w') file.write(str(aod_outcome_list_v2)) file.close() #计算耗时结果 endtime = datetime.datetime.now() print(endtime - starttime) #程序用时写入TXT file = open('TIME.txt', 'w') file.write(str(endtime - starttime)) file.close() #程序运行完成后关机 def shutdown_computer(seconds): print(str(seconds) + u' 秒后将会关机') time.sleep(seconds) print('关机')
# 避免输出结果字符串省略,四行设置都需要 pd.set_option('display.max_rows', None) # 行 pd.set_option('display.max_columns', 1000) # 列 pd.set_option('display.width', 1000) pd.set_option('display.max_colwidth', 1000) aod_outcome_list_v2 = pd.DataFrame(aod_outcome_list_v2) # 格式转换 # 重设列名 aod_outcome_list_v2.columns = ['日期', '监测站', "AOD值"] # 同日期,多文件情况下的均值处理 aod_outcome_list_v2 = aod_outcome_list_v2.groupby(['日期', "监测站"]).mean() # 美化group by均值计算后的数据框格式 aod_outcome_list_v2 = pd.Series(aod_outcome_list_v2["AOD值"]) # AOD值按分组计算的结果 aod_outcome_list_v2.to_excel(output_file_path+"%s.xlsx" % item[2]) # 完整结果存入excel # 程序用时写入文件 file = open('程序耗时.txt', 'w') end_time = datetime.datetime.now() file.write(str(end_time - start_time)) file.close() # 程序运行完成后关机 def shutdown_computer(seconds): print("程序已完成," + str(seconds) + '秒后将会关机') time.sleep(seconds) print('关机') os.system('shutdown -s -f -t 1') shutdown_computer(60)
for i in range(longitude.shape[1]): # 列 for j in range(longitude.shape[0]): # 行 vec1 = np.array([longitude[i][j], latitude[i][j]]) vec2 = np.array([item[0], item[1]]) d = np.linalg.norm(vec1 - vec2) # d = ((longitude[i][j]) ** 2 - item[0] ** 2 + (latitude[i][j]) ** 2 - item[1] ** 2) # 距离,公式有误 if d > 0 and d < 0.88 and aod[i][j] > 0: aodlist.append(aod[i][j]) #print("%s文件的%s监测站AOD值:" % (hdf,item[2]), np.average(aodlist)) # 批量改名,一次输出 aod_outcome = "%s文件" % hdf, "%s监测站AOD值" % item[2], np.average(aodlist) aod_outcome_list.append(aod_outcome) print(aod_outcome_list) #避免字符串省略,四行设置都需要 pd.set_option('display.max_rows', None) #行 pd.set_option('display.max_columns', 1000) #列 pd.set_option('display.width', 1000) pd.set_option('display.max_colwidth', 1000) #写入TXT aod_outcome_list = pd.DataFrame(aod_outcome_list) file = open('data.txt', 'w') file.write(str(aod_outcome_list)) file.close() # 计算所用时间 endtime = datetime.datetime.now() print(endtime - starttime) ''' 批量处理多个HDF文件,尝试写入excel or txt '''
def get_aod_multiprocessing(location_xy): JCZ_file = pd.read_excel("F:\\毕业论文程序\\MODIS\\坐标\\多线程.xlsx", sheet_name=location_xy) JCZ = [] # 批量导入监测站 for i in range(len(JCZ_file)): exec('JCZ%s = [JCZ_file["经度"][i],JCZ_file["纬度"][i],JCZ_file["城市"][i]+"-"+JCZ_file["监测点名称"][i]]' % i) exec("JCZ.append(JCZ%s)" % i) # exec可以执行字符串指令 for item in JCZ: aod_outcome_list = [] # 每个监测站生成一个文件时 for hdf in file_name: HDF_FILE_URL = file_path + hdf file = SD(HDF_FILE_URL) # data_sets_dic = file.datasets() ''' #输出数据集名称 for idx, sds in enumerate(data_sets_dic.keys()): print(idx, sds) ''' sds_obj1 = file.select('Longitude') # 选择经度 sds_obj2 = file.select('Latitude') # 选择纬度 sds_obj3 = file.select('Optical_Depth_Land_And_Ocean') # 产品质量最高的AOD数据集 longitude = sds_obj1.get() # 读取数据 latitude = sds_obj2.get() aod = sds_obj3.get() longitude = np.array(longitude) # 格式转换 latitude = np.array(latitude) aod = np.array(aod) # 距离计算,提取监测站半径为r范围内的AOD值 aod_list = [] @jit(nogil=True) # 此次,numpy切片的检索顺序是先"行"后"列" def get_aod_list(longitude_df, latitude_df, aod_df): for row in range(longitude_df.shape[0]): # 行 676 for column in range(longitude_df.shape[1]): # 列 451 d = geo_distance(longitude_df[row][column], latitude_df[row][column], item[0], item[1]) if (d > 0) and (d < r) and aod_df[row][column] > 0: aod_list.append(aod_df[row][column]) get_aod_list(longitude, latitude, aod) aod_outcome = "%s文件" % hdf, "%s" % item[2], np.average(aod_list) # 进度 print("完成 %s文件" % hdf, "%s" % item[2]) aod_outcome_list.append(aod_outcome) aod_outcome_list_v2 = [] for element in aod_outcome_list: element = pd.Series(element) # 格式转换 # 截取文件名称,结果为获取数据的时间,格式为"年+第几天" element[0] = str(element[0])[10:17] # 如2018123 # 修改日期格式为XX月XX日 element[0] = time.strptime(element[0], '%Y%j') element[0] = time.strftime("%Y-%m-%d ", element[0]) element = np.array(element) # 格式转换 aod_outcome_list_v2.append(element) # 避免输出结果字符串省略,四行设置都需要 pd.set_option('display.max_rows', None) # 行 pd.set_option('display.max_columns', 1000) # 列 pd.set_option('display.width', 1000) pd.set_option('display.max_colwidth', 1000) aod_outcome_list_v2 = pd.DataFrame(aod_outcome_list_v2) # 格式转换 # 重设列名 aod_outcome_list_v2.columns = ['日期', '监测站', "AOD值"] # 同日期,多文件情况下的均值处理 aod_outcome_list_v2 = aod_outcome_list_v2.groupby(['日期', "监测站"]).mean() # 美化group by均值计算后的数据框格式 aod_outcome_list_v2 = pd.Series(aod_outcome_list_v2["AOD值"]) # AOD值按分组计算的结果 aod_outcome_list_v2.to_excel(output_file_path+"%s.xlsx" % item[2]) # 完整结果存入excel # 程序用时写入文件 file = open('程序耗时.txt', 'w') end_time = datetime.datetime.now() file.write(str(end_time - start_time)) file.close()
error_file = [] print("共%s个文件" % len(file_name)) print("正在检索...") for hdf in file_name: try: HDF_FILR_URL = file_path + hdf file = SD(HDF_FILR_URL) datasets_dic = file.datasets() i = i + 1 # 计数 print("当前进度:" + str(format(i / len(file_name), ".00%"))) # print(hdf+"第"+str(i)+"个文件完整") except Exception as e: i = i + 1 # print(hdf+"第"+str(i)+"个文件错误") error_information = hdf + "第" + str(i) + "个文件错误" # error_file.append(error_information) error_file.append(hdf) print("错误文件个数:" + str(len(error_file)) + "个") ''' file=open('错误文件信息.txt','w') file.write(str(error_file)) file.close() ''' # 批量删除 for item in error_file: os.remove(file_path + item) print("已删除" + item)
item = np.array(item)#格式转换 aod_outcome_list_v2.append(item) #避免输出结果字符串省略,四行设置都需要 pd.set_option('display.max_rows',None)#行 pd.set_option('display.max_columns',1000)#列 pd.set_option('display.width', 1000) pd.set_option('display.max_colwidth',1000) aod_outcome_list_v2 = pd.DataFrame(aod_outcome_list_v2)#格式转换 #重设列名 aod_outcome_list_v2.columns = ['日期', '监测站',"AOD值"] #同日期,多文件情况下的均值处理 aod_outcome_list_v2 = aod_outcome_list_v2.groupby(['日期',"监测站"]).mean() #美化groupby均值计算后的数据框格式 aod_outcome_list_v2 =pd.Series(aod_outcome_list_v2["AOD值"])#AOD值按分组计算的结果 aod_outcome_list_v2.to_excel("AOD值提取结果.xlsx")#完整结果存入excel #程序用时写入TXT file=open('程序耗时.txt','w') endtime = datetime.datetime.now() file.write(str(endtime - starttime)) file.close() #程序运行完成后关机 def shutdown_computer(seconds): print("程序已完成,"+ str(seconds) + '秒后将会关机') time.sleep(seconds) print('关机') os.system('shutdown -s -f -t 1') #shutdown_computer(60)