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)