当前位置: 首页 > article >正文

arcpy实现批量分区统计

arcpy实现批量分区统计,并将最后结果输出到一张表中。代码如下。



# Import system modules
import arcpy
from arcpy import env
from arcpy.sa import *
import os
from pathlib import Path

current_folder = Path(os.getcwd())
data_path = current_folder.parent / "data/sj_analysis/data_class"

# 土地利用的数据表格
# Set environment settings
arcpy.env.workspace = os.path.normcase(data_path)
# 获取工作空间中的所有栅格文件




# 遍历所有栅格文件
for sj_raster in arcpy.ListRasters():

    zoneField = "WYZ"
    inZoneData = current_folder.parent / "map/data/行政界限_merge.shp"
    
    print(inZoneData)

    # 允许覆盖
    arcpy.gp.overwriteOutput = True
    #
    outTable = "sj_area_{}.dbf" .format(sj_raster[-8:-4])
    table_path = data_path/"table"

    # 确保路径一定存在
    if not os.path.exists(table_path):
        os.makedirs(table_path)

    # 输出表格的路径
    table_out_path = os.path.join(table_path,outTable)

    print(table_out_path)

    # Check out the ArcGIS Spatial Analyst extension license
    # arcpy.CheckOutExtension("Spatial")

    # Execute ZonalStatisticsAsTable
    outZSaT = ZonalStatisticsAsTable(os.path.normcase(inZoneData), zoneField, sj_raster, 
                                    table_out_path, "DATA", "ALL")


###### 新建两个字段,并计算它们的字段值.###### 新建两个字段,并计算它们的字段值.
 
# Set environment settings
arcpy.env.workspace = os.path.normpath(table_path)


table_list_t = arcpy.ListTables()

for table_singe_1 in table_list_t:

    # Set local variables
    inFeatures = table_singe_1
    fieldName1 = "AREA_WK"
    fieldName2 = "MEAN_V"
    fieldName3 = "sumValue"

    expression1 = "!SUM!*8100/1000000/10000" #万公顷
    expression2 = "!MEAN!"
    expression3 = "!AREA_WK!*!MEAN_V!/100"    
    
    # Execute AddField
    arcpy.gp.overwriteOutput = True
    arcpy.AddField_management(inFeatures, fieldName1, "DOUBLE")
    arcpy.AddField_management(inFeatures, fieldName2, "DOUBLE")
    arcpy.AddField_management(inFeatures, fieldName3, "DOUBLE")

    # Execute CalculateField 
    arcpy.CalculateField_management(inFeatures, fieldName1, expression1, "PYTHON3")#arcgis pro比较新,因而用的是PYTHON3
    arcpy.CalculateField_management(inFeatures, fieldName2, expression2, "PYTHON3")
    arcpy.CalculateField_management(inFeatures, fieldName3, expression3, "PYTHON3")

####  将表格中dbf全部导出为excel

import arcpy

# Set environment settings
arcpy.env.workspace = os.path.normpath(table_path)


table_lists = arcpy.ListTables()
print(table_lists)

for table_singe in table_lists:
    in_table = table_singe

    excel_path = data_path/"table_xls"

    # 确保文件夹存在
    if not os.path.exists(excel_path):
        os.makedirs(excel_path)

    print("finish{}".format(in_table))

    out_xls = os.path.join(excel_path, "{}.xls".format(in_table[:-4]))
    arcpy.TableToExcel_conversion(in_table, out_xls)

###
### 把一个文件夹里所有的excel的第5和第6行提取出来

import os
import pandas as pd

def process_excel_files(input_folder, output_file):
    # 创建一个空的列表来存储所有文件的数据
    all_data = []

    # 遍历文件夹中的所有xls文件
    for file_name in os.listdir(input_folder):
        if file_name.endswith('.xls'):
            # 生成文件的完整路径
            file_path = os.path.join(input_folder, file_name)
            
            # 读取Excel文件
            df = pd.read_excel(file_path)
            
            # 检查文件是否有足够的列数
            if df.shape[1] >= 22:
                # 取出第五和第六列
                selected_columns = df.iloc[:, [1, 19]]
                
                # 添加文件名到每一列的顶部
                selected_columns.columns = [f"{file_name} - {col}" for col in selected_columns.columns]
                
                # 将数据添加到列表中
                all_data.append(selected_columns)
            else:
                print(f"{file_name} 文件没有足够的列数,跳过此文件。")

    # 将所有的数据合并到一个DataFrame中
    if all_data:
        combined_df = pd.concat(all_data, axis=1)
        
        # 写入到一个新的Excel文件中
        combined_df.to_excel(output_file, index=False)
    else:
        print("没有找到任何合适的文件来处理。")

# 设置输入文件夹路径和输出文件名
input_folder = excel_path  # 替换为你的文件夹路径
output_file = data_path/"result.xlsx"  # 输出文件名

# 调用函数处理Excel文件
process_excel_files(input_folder, output_file)

总结
1.环境设置中需要用到os.path.normcase
2.分区统计时,路径设置需要用到

v2版本(未来会改变的版本)
1.需要优化路径,特别是最后结果输出的路径


http://www.kler.cn/news/364268.html

相关文章:

  • SELinux中的安全标记与强制访问控制
  • 怎么提取pdf的某一页?批量提取pdf的某一页的简单方法
  • ctfshow-web入门-web31
  • 【c++差分数组】P9583涂色
  • 域3:安全工程 第6章 密码学与对称密钥算法
  • 为什么诺贝尔物理学奖颁给了 AI 大神
  • 【如何获取股票数据18】Python、Java等多种主流语言实例演示获取股票行情api接口之沪深A股解禁限售数据获取实例演示及接口API说明文档
  • 分享一个开源的、自托管的 API 创建工具——Strapi
  • 【Unity踩坑】无法关闭Unity(Application.Shutdown.CleanupEngine)
  • 高边坡稳定安全监测预警系统解决方案
  • 文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《考虑负荷时空迁移的5G基站与配电网协同优化运行 》
  • mfc 最小二乘法
  • 道可云人工智能元宇宙每日资讯|咸阳首个人工智能算力中心投运
  • openpnp - 解决“底部相机校正成功后, 开机归零时,吸嘴自动校验失败的问题“
  • 使用freemarker实现在线展示文档功能开发,包括数据填充
  • 【NPM】工程化依赖包/库开发 之 基础知识
  • 【2024工业图像异常检测代码复现】GLASS
  • 【Linux】进程池
  • 前端——原生Selection api操作选中文本 样式、取消样式(解决标签的无限嵌套问题)
  • 《Java与API的浪漫邂逅:一键获取商品详情》
  • 在Centos7.9服务器上使用LVM方式挂载磁盘以及Windows磁盘性能测试与Linux磁盘性能测试命令hdparm详细
  • 构建简单的梯度提升决策树(GBDT)模型:MATLAB 实现详解
  • 酒店定制门牌的材质有哪些
  • Pr 视频效果:色阶
  • nginx与http的前世今生详解
  • 10. mapreduce实现wordcount