2 votos

Unir tablas a la clase de características

Tengo un problema que intento resolver. Quiero unir varios archivos CSV a una clase de características, me gustaría crear una nueva clase de características para cada archivo CSV. Si es posible cada fc tendría el nombre del archivo CSV utilizado.

Por ejemplo, si tengo: abc.csv y zxy.csv quiero que la feature class se llame , y que cada fc corresponda a uno de los archivos csv, abc y zxy.

inFeatures = r"path to my feature class"
layerName = "fc_layer"
joinTables = r"path to the folder where my CSV files are"
joinFieldlyr = "CI_INT"
joinFieldtab = "CI"
outFeature = r"path to the folder dataset where I want my feature class"

arcpy.MakeFeatureLayer_management(inFeatures, layerName)
arcpy.AddJoin_management(layerName, joinFieldlyr, joinTables, joinFieldtab)
arcpy.CopyFeatures_management(layerName, outFeature)

Ese código funciona perfectamente para un archivo pero no consigo poner bien la parte del nombre. He intentado utilizar os.path.join y os.path.splitext para encontrar y utilizar el nombre de mis archivos, pero sin éxito. También he intentado codificar un bucle para iterar a través de mi carpeta para que no tenga que hacerlo manualmente.

2voto

Anton8000 Puntos 165

Prueba esto:

import arcpy, os
arcpy.env.overwriteOutput=1

#Change to match your data
arcpy.env.workspace='C:\filegeodatabase.gdb'
inFeatures='polygon12345'
csvfolder=r'C:\csvfolder'

#Find all csv files in csvfolder and add to csvlist
csvlist=[]
for file in os.listdir(csvfolder):
    if file.endswith(".csv"):
        csvlist.append(os.path.join(csvfolder, file))

#For each csv in csvlist join and export
for csv in csvlist:
    arcpy.MakeFeatureLayer_management(in_features=inFeatures, out_layer='fclyr')
    arcpy.MakeTableView_management(in_table=csv, out_view='csvview')
    arcpy.AddJoin_management(in_layer_or_view='fclyr', in_field='CI_INT', join_table='csvview', join_field='CI')
    arcpy.CopyFeatures_management(in_features='fclyr',out_feature_class=os.path.splitext(os.path.basename(csv))[0])

Si tiene espacios en blanco en el nombre csv puede utilizar str.replace() para eliminarlos. La última línea de código será entonces:

arcpy.CopyFeatures_management(in_features='fclyr',out_feature_class=os.path.splitext(os.path.basename(csv))[0].replace(" ","")

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X