Suite

Pourquoi Python dit que le shapefile n'existe pas ?

Pourquoi Python dit que le shapefile n'existe pas ?


Je travaille sur un script qui imprime les noms des hôpitaux qui se trouvent dans un certain code postal. Cependant, lorsque j'exécute mon code, python continue de me donner un message d'erreur indiquant que mon fichier de formes Hospitals n'existe pas. J'ai testé pour voir si le fichier de formes existe ou non en utilisant arcpy.Exists et j'obtiens la réponse "True". Je me demandais également si cela pouvait être dû au fait que le fichier est verrouillé d'une manière ou d'une autre, mais j'ai essayé de supprimer mes objets et mes curseurs, ainsi que de fermer arcgis et de redémarrer python et rien n'a changé.

Quelqu'un peut-il me dire pourquoi Python ne reconnaît pas mon fichier de formes ?

Code de référence :

import arcpy arcpy.env.workspace=r"C:UsersCaraDocumentsMPSGISProgramming and ScriptingLab6Lab 6 Data" work=arcpy.env.workspace zip5=78705 strZip=str(zip5) arcpy.env .overwriteOutput = True def searchHospitals(work,zip5): fc= "Hospitals.shp" #créer une liste pour stocker les valeurs hospital=[] whereClause= '"ZIPCODE" LIKE'+"'%s%%'"% strZip sCursor = arcpy.SearchCursor(fc, whereClause, "", "", "") pour la ligne dans sCursor : rowHospital = row.getValue("NAME") #si la valeur de rowHospital n'est pas déjà dans les hôpitaux, ajoutez. if (not(rowHospital in Hospitals)): hôpitaux.append(rowHospital) #nombre d'hôpitaux dans la liste count= len(hôpitaux) #print results print hôpitaux print "Total %s hôpitaux ont été trouvés dans le code postal %s"%( count, zip5) del row, sCursor

Voici le message d'erreur:

searchHospitals(work,zip5) Traceback (appel le plus récent en dernier): Fichier "", ligne 1, dans  searchHospitals(work,zip5) Fichier "C:UsersCaraDocumentsMPSGISProgramming and ScriptingPython Scriptscursor_objects.py.py", ligne 98, dans searchHospitals sCursor= arcpy.SearchCursor(fc, whereClause, "" , "", "") Fichier "C:Program Files (x86)ArcGISDesktop10.2arcpyarcpy\__init__.py", ligne 1167, dans SearchCursor return gp.searchCursor(dataset, where_clause, spatial_reference, fields , sort_fields) Fichier "C:Program Files (x86)ArcGISDesktop10.2arcpyarcpygeoprocessing\_base.py", ligne 359, dans searchCursor self._gp.SearchCursor(*gp_fixargs(args, True)) ) IOError : "Hospitals.shp" n'existe pas

Tant que votre requête est correctement structurée, cela devrait fonctionner. J'ai utilisé le da.SearchCursor à la place parce que j'ai remarqué que vous étiez sur 10.2. j'ai aussi enlevé travail à partir des paramètres de la fonction car il n'était utilisé nulle part.

import arcpy arcpy.env.overwriteOutput = True workspace = "C:UsersCaraDocumentsMPSGISProgramming and ScriptingLab6Lab 6 Data" arcpy.env.workspace = workspace fc = " Hospitals.shp" def searchHospitals(code postal): #créer une liste pour stocker les valeurs hôpitaux = [] whereClause= '"CODE ZIP" LIKE' + "'%s%%'" % str(code postal) avec arcpy.da.SearchCursor( fc, ("NAME"), whereClause) as sCursor : pour la ligne dans sCursor : rowHospital = str(row[0]) #si la valeur de rowHospital n'est pas déjà dans les hôpitaux, ajoutez. si rowHospital n'est pas dans les hôpitaux : hospital.append(rowHospital) #nombre d'hôpitaux dans la liste count = len(hôpitaux) #print results print hôpitaux print "Total {0} hôpitaux ont été trouvés dans le code postal {1}".format(count, zipcode) #exécute la fonction pour le code postal 55555 searchHospitals(55555)

J'irais probablement avec la réponse de ian en utilisant le curseur da, mais si vous voulez juste "réparer" votre script à l'aide du curseur hérité, il semble que le paramètre de l'ensemble de données n'utilise pas votre espace de travail défini --- votre solution de contournement peut être d'entrer le chemin complet vers votre ensemble de données. Si vous importez os au début du script, vous pouvez essayer cette substitution de ligne dans votre fonction :

sCursor= arcpy.SearchCursor(os.path.join(work,fc), whereClause)