Более

Разделение задания на ArcPy SearchCursor?


Я запускаю цикл for с курсором, чтобы разбить большой класс пространственных объектов на множество более мелких (по одному полигону каждый). ArcMap аварийно завершает работу примерно после 1100 итераций, и я пытаюсь разбить задание на более управляемые фрагменты. Я просто не могу правильно понять код. У меня 4909 записей, и я хочу сделать это пятью наборами по 1000.

Ниже представлена ​​копия моего исходного кода.

Как мне изменить его так, чтобы он запускался для выборки строк за раз?

fc = 'C:  Users  xxxxx  popcenters  miyun_villages_poly.shp' cursor = arcpy.SearchCursor (fc) для строки в курсоре: FID = str (row.getValue ("FID")) where = '" FID "= '+ FID out_fl =" C:  Users  xxxx  miyun_allvillages.gdb  allvillages_miyun  fl_ {0} ". Format (FID) arcpy.MakeFeatureLayer_management (fc, out_fl, где) SaveToLayerFile_management (out_fl_management (out_fl, where) , allvillagesfl)

Значения FID в шейп-файлах всегда начинаются с 0 и являются последовательными и возрастающими (пока вы не редактируете), вы можете использовать это в своих интересах.

Python не делаетдля n = 1 значениецикл, но вы можете сделатьFidList = диапазон (начало, остановка, шаг)а затем повторитьдля каждого FidList.

import os, sys, arcpy InFeatures = sys.argv [1] FtCnt = int (arcpy.GetCount_management (InFeatures) .getOutput (0)) FIDlist = range (0, FtCnt) # начало с 0 по умолчанию, добавлено для ясности # вы здесь можно сделать много 1k, выполнив range (0,1000), затем range (1000,2000)… # range (0,1000) возвращает список от 0 до 999 # range (1000,2000) возвращает список от 1000 до 1999 for ThisFid в FIDlist: DefQ = "" FID  "=% i"% ThisFid arcpy.MakeFeatureLayer_management (InFeatures, "Layer", DefQ) # сохраните ваш слой здесь out_fl = "C:  Users  xxxx  miyun_allvillages .gdb  allvillages_miyun  fl_% i.lyr "% ThisFid arcpy.SaveToLayerFile_management (" Layer ", out_fl) # очистить arcpy.Delete_management (" Layer ") # очистить ссылку на слой

Это не будет работать ни с одним другим источником данных.