Estoy trabajando en una forma de tomar el número de proyectos que están marcados como activos en una hoja de cálculo y ponerlo en una expresión SQL que pueda usar para seleccionar. Hasta ahora tengo esto
dirname = os.path.dirname(__file__)
gdbname = 'G:\\GIS\\General Maps\\AltumProjects\\AltumProjects.gdb'
env.workspace = gdbname
env.overwriteOutput = True
Riv = gdbname + '\\RivParcels'
df = pd.read_csv(dirname + '/ActiveProjects.csv')
newdf = df.loc[df['Status'] == 'Active', 'Project'].reset_index()
print(newdf)
Proj = np.array(newdf['Project'])
with open("Output.txt", "w") as text_file:
print(f"\"Project IN ({Proj})\"", file=text_file)
with fileinput.FileInput("Output.txt", inplace=True, backup='.bak') as file:
for line in file:
print(line.replace("' ", "', "), end='')
with fileinput.FileInput("Output.txt", inplace=True, backup='.bak') as file:
for line in file:
print(line.replace("[", ""), end='')
with fileinput.FileInput("Output.txt", inplace=True, backup='.bak') as file:
for line in file:
print(line.replace("]", ""), end='')
expr = open('./Output.txt').readline()
Que crea un archivo de texto que es:
"Project IN ('C1335', 'C1410', 'C1237')"
Todo esto funciona bien pero cuando lo añado a SelectLayerByAttribute:
Projects = arcpy.MakeFeatureLayer_management('Projects', 'Projects.lyr')
Env = arcpy.SelectLayerByAttribute_management(Projects, "NEW_SELECTION", expr)
arcpy.CopyFeatures_management(Env, gdbname + '\\ActiveEnvProjects')
EnvProjects = gdbname + '\\ActiveEnvProjects'
SelectEnv = arcpy.SelectLayerByLocation_management(Riv, 'COMPLETELY_CONTAINS', EnvProjects, 0, 'NEW_SELECTION')
arcpy.CopyFeatures_management(SelectEnv, gdbname + '\\EnvProjectParcels')
print("Environmental Projects Done")
Lo entiendo:
ERROR 000358: Expresión no válida
Si añado esto manualmente como una cadena funciona bien pero no consigo que funcione así. ¿Hay algo en la forma en que estoy escribiendo mal la expresión?