Python 批量处理 ICESat-2 ATL08 数据
改编内容,原文链接:ICESat2学习笔记10 :python批量读取处理ATL08数据_晚秋10的博客-CSDN博客
如果报错KeyError: 'Unable to open object (component not found)',请先检查h5存放路径是否只包含源数据*.h5。
代码包括了简单数据筛选以及批量导出csv,代码如下:
import pandas as pd
import h5py
import os
import numpy as np
def read_atl08(fname):
# Each beam is a group, strong beams are selected only here
group = ['/gt1r', '/gt2r', '/gt3r']
# Loop trough beams
for k, g in enumerate(group):
with h5py.File(fname, 'r') as fi:
# Define the variables and construction, open the h5 files and check it out
lat = fi[g + '/land_segments/latitude'][:]
lon = fi[g + '/land_segments/longitude'][:]
h_canopy = fi[g + '/land_segments/canopy/h_canopy'][:]
h_canopy_uncertainty = fi[g + '/land_segments/canopy/h_canopy_uncertainty'][:]
result = pd.DataFrame()
result['lon'] = lon
result['lat'] = lat
result['h_canopy'] = h_canopy
result['h_canopy_uncertainty'] = h_canopy_uncertainty
# Filter the data
dropindex = np.where((np.array(result['h_canopy'].values) < 3) | (np.array(result['h_canopy'].values) > 120) | (
np.array(result['h_canopy_uncertainty'].values) > 20))
dropindex = np.array(dropindex).flatten()
result = result.drop(index=list(dropindex))
ofilecsv = fname.replace('.h5', '_' + g[1:] + '.csv')
print('out ->', ofilecsv)
result.to_csv(ofilecsv, index=None)
def readMultiH5(dir):
# Iterate the dir, deal with all h5 files
# For root_dir, sub_dir, files in os.walk(r'' + dir):
for root_dir, sub_dir, files in os.walk(dir):
for file in files:
if file.endswith('h5'):
# Absolute path
file_name = os.path.join(root_dir, file)
read_atl08(file_name)
# Execute
root_dir = r'H:\XXX' # Root path
readMultiH5(root_dir)
print('done')
如果遇到问题或者提供建议,欢迎留言,也可联系QQ:1262840380