如何在ArcPy的for循环中修改输出文件名?
解决ArcPy循环中ExtractByAttributes结果覆盖问题
核心问题是每次循环复用同一个result变量,导致之前的结果被覆盖。可以通过以下两种方式解决:
方式一:用列表存储所有结果
将每次迭代的结果存入列表,既保留所有处理后的栅格对象,又避免单个变量覆盖:
# 初始化列表存储所有处理结果 results_list = [] for i in test: path = folder_path + "\\" + i + "\\" + i + '.tif' # 生成当前栅格的处理结果 current_result = ExtractByAttributes(path,"VALUE = 10 OR VALUE = 30") results_list.append(current_result) # 可选:将结果保存到磁盘,用原文件名生成唯一输出路径 output_path = f"{folder_path}\\extracted_{i}.tif" current_result.save(output_path)
- 后续可通过
results_list[索引值]调用对应栅格的处理结果,比如results_list[0]对应第一个栅格的处理结果。 - 保存文件时,用
extracted_前缀+原文件名的方式,确保每个输出文件名称唯一,不会被覆盖。
方式二:用字典关联原文件名与结果
如果需要更直观地对应原栅格和处理结果,可用字典存储,键为原文件名,值为处理后的栅格对象:
# 初始化字典存储结果,键为原栅格文件名 results_dict = {} for i in test: path = folder_path + "\\" + i + "\\" + i + '.tif' current_result = ExtractByAttributes(path,"VALUE = 10 OR VALUE = 30") results_dict[i] = current_result # 保存到磁盘 output_path = f"{folder_path}\\extracted_{i}.tif" current_result.save(output_path)
- 后续可通过
results_dict["原文件名"]直接获取对应处理结果,比如results_dict["dem_01"]就对应名为dem_01的栅格处理结果,维护更方便。
内容的提问来源于stack exchange,提问作者SunriderDestiny
相关产品推荐
相关产品推荐

