如何用Python提取文本文件中含指定值的BAND-INDEX并转为数组
Python 实现指定数值的BAND-INDEX提取与数组转换
核心思路
遍历文本文件,实时追踪当前所处的BAND-INDEX块,当检测到目标数值存在于该块中时,将块内所有数值转换为数组并保存。
代码实现
def extract_band_index(target_value, file_path): result_arrays = [] current_band_data = [] is_in_band = False with open(file_path, 'r', encoding='utf-8') as f: for line in f: stripped_line = line.strip() # 识别BAND-INDEX的起始行(需根据你的实际数据格式调整判断条件) if "BAND-INDEX" in stripped_line: # 处理上一个未完成的BAND块 if is_in_band: # 检查当前块是否包含目标数值 if any(target_value in row for row in current_band_data): # 将块内数据转换为浮点数组(跳过无效行) try: band_array = [float(row) for row in current_band_data if row] result_arrays.append(band_array) except ValueError: # 处理非数值行的情况,可根据需求调整 pass # 重置当前块状态 current_band_data = [] is_in_band = True elif is_in_band: # 收集当前BAND块的内容 if stripped_line: current_band_data.append(stripped_line) # 处理文件末尾的最后一个BAND块 if is_in_band and any(target_value in row for row in current_band_data): try: band_array = [float(row) for row in current_band_data if row] result_arrays.append(band_array) except ValueError: pass return result_arrays # 调用示例 target_num = "-24.83271" data_file = "your_data_file.txt" # 替换为你的数据文件路径 extracted_bands = extract_band_index(target_num, data_file) # 输出结果 for i, band in enumerate(extracted_bands, 1): print(f"第{i}个匹配的BAND-INDEX数组:\n{band}\n")
关键调整说明
- BAND起始识别:如果你的BAND-INDEX起始行格式是
BAND-INDEX 1这类带编号的行,可直接用stripped_line.startswith("BAND-INDEX")来判断。 - 数值匹配方式:上述代码是精确字符串匹配,若需要允许浮点精度误差(比如目标值是-24.83271,实际数据是-24.832709999),可修改匹配逻辑为:
target_float = float(target_value) # 替换原有的any(...)判断 if any(abs(float(row) - target_float) < 1e-6 for row in current_band_data if row.replace('.', '',1).replace('-','',1).isdigit()) - 非数值行处理:如果BAND块内存在非数值的描述行,可在转换数组时添加过滤条件,只保留能转为浮点的行。
内容的提问来源于stack exchange,提问作者Shivam
相关产品推荐
相关产品推荐

