Hello. I was trying to copy the shape features a number of times based on the numeric field by using the python code(The page referenced: <https://community.esri.com/t5/geoprocessing-questions/copy-features-a-number-of-times-based-on-a-num...>@ XanderBakker)
---
def main():
import arcpy
import os
fc_in = r"D:\forest\CHISAN\shp\L_koshibugawa.shp" # this one exists
fld_count = "Count"
fc_out = r"D:\forest\CHISAN\shp\L_koshibugawa_duplicate.shp" # this one will be created
sr = arcpy.Describe(fc_in).spatialReference
# create the empty output featureclass
path, name = os.path.split(fc_out)
arcpy.CreateFeatureclass_management(path, name, "POLYLINE", fc_in, "SAME_AS_TEMPLATE", "SAME_AS_TEMPLATE", sr)
# insert the features into the output fc
with arcpy.da.SearchCursor(fc_in, '*') as curs_in:
flds_in = curs_in.fields
idx_cnt = flds_in.index(fld_count)
with arcpy.da.InsertCursor(fc_out, '*') as curs_out:
for row in curs_in:
cnt = row[idx_cnt]
for i in range(0, cnt):
curs_out.insertRow(row)
if __name__ == '__main__':
main()
---
The module was able to run, but I it got the error message below.
Traceback (most recent call last):
File "D:\forest\test.py", line 31, in <module>
main()
File "D:\forest\test.py", line 25, in main
for i in range(0, cnt):
TypeError: range() integer end argument expected, got float.
Would be super nice if someone could lectuer me how to solve this problem.
Thank you.
Solved! Go to Solution.
I would say it's a simple as your COUNT field being of FLOAT type. Check this, and if so, use Type Conversion to turn it into a integer:
for i in range(0, int(cnt))
I've got no idea if the rest of the code is even valid as it gave me a headache.
I would say it's a simple as your COUNT field being of FLOAT type. Check this, and if so, use Type Conversion to turn it into a integer:
for i in range(0, int(cnt))
I've got no idea if the rest of the code is even valid as it gave me a headache.
The module run successfully after I fixed the field type from "float" to "integer".
Much Appliciated 🙂
your field is incorrect
fld_count = "Count"
check to make sure that it represents a true count because if it contains decimal floats like 1.5 you are going to have more issues.
As for formatting
Code formatting ... the Community Version - GeoNet, The Esri Community
with arcpy.da.SearchCursor(fc_in, '*') as curs_in:
flds_in = curs_in.fields
idx_cnt = flds_in.index(fld_count)
So I think flds_in is a tuple of the cursor fields, then the .index() method is used effectively as .index("COUNT"), to be able to grab the row[] by index (i.e. the value of the COUNT field at that row).
that leads me to think that the COUNT field is float type as per the error, although what is actually going on in the code and I have little idea.