<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: How do you duplicate a point within a shapefile using Python? in Python Questions</title>
    <link>https://community.esri.com/t5/python-questions/how-do-you-duplicate-a-point-within-a-shapefile/m-p/328841#M25579</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;If your trying to insert the feature simply based on the old stuff its a pretty straight forward&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;you'll want to create the insert cursor defined with your insert fields and just fill in the shape information from your old one into the new one.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;For returning an error only if there is no match, I find it easier to stick it in is own subroutine in and return an error only if one doesn't match&lt;/P&gt;&lt;PRE __default_attr="python" __jive_macro_name="code" class="jive_macro_code _jivemacro_uid_14067281522673876 jive_text_macro" jivemacro_uid="_14067281522673876" modifiedtitle="true"&gt;
&lt;P&gt;#Only use shape@ if your insert into a table, otherwise its not needed.&lt;/P&gt;
&lt;P&gt;#Unless you want to keep the XY coordinates, then create a field and populate those too&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;def findMatch(in_table,field_name2,field_name3,targetFC,targetKeyField,newKeyID,newField2,newField3):&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; with arcpy.da.InsertCursor(in_table,[field_name2,field_name3,"SHAPE@"]) as ic:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; with arcpy.da.SearchCursor(targetFC,[targetKeyField,"SHAPE@") as sc:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Loop the features in your feature&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for row in sc:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Find match&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if row[0] == newKeyID:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #i don't know what your insertvalues are, but they go below in the first two spots as defined in your cursor&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #For each item you want to add, you'll need to add it to your insert cursor&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Also, keep that extra comma at the end of the insert.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ic.insertRow((newField2,newField3,row[2],))&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.AddMessage("{} added".format(newKeyID))&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return True&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #This runs if not match found&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.AddMessage("{} No match".format(newKeyID))&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return False&lt;/P&gt;
&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;then you call it using the following, filling in the values with your desired inputs:&lt;/P&gt;&lt;PRE __default_attr="python" __jive_macro_name="code" class="jive_macro_code _jivemacro_uid_14067286079376328 jive_text_macro" jivemacro_uid="_14067286079376328"&gt;&lt;STRONG style="color: rgba(0, 0, 0, 0); font-size: 12px; font-family: Consolas, 'Courier New', Courier, mono, serif;"&gt;findMatch(in_table,field_name2,field_name3,targetFC,targetKeyField,newKeyID,newField2,newField3)&lt;/STRONG&gt;
&lt;P&gt;&lt;/P&gt;
&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;you'll have to play around to make it work exactly how you want but it should put you on the right track.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Cheers&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 30 Jul 2014 13:57:52 GMT</pubDate>
    <dc:creator>CodyScott</dc:creator>
    <dc:date>2014-07-30T13:57:52Z</dc:date>
    <item>
      <title>How do you duplicate a point within a shapefile using Python?</title>
      <link>https://community.esri.com/t5/python-questions/how-do-you-duplicate-a-point-within-a-shapefile/m-p/328840#M25578</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;How do you duplicate a point within a single feature class using Python? I have a partial sample script below, but in a nutshell, I want to duplicate a point, copy it into the same shapefile, and pupulate the fields with user-provided strings. I suspect this is elementary, but I'm new at this and am frustrated with loops and cursors.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;# Script tool will take a point file and allow the user to duplicate a single point while updateing necessary field information.&lt;/P&gt;&lt;P&gt;# The purpose is not to delete or overwrite the orginal point object, but rather to ad a duplicate point with the new information.&lt;/P&gt;&lt;P&gt;# This allows historical context for apoint that spatially never changes, but who's fields are dynamic.&lt;/P&gt;&lt;P&gt;# No information is hard-coded.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;import arcpy&lt;/P&gt;&lt;P&gt;# set up input variables for target folder and target dataset.&lt;/P&gt;&lt;P&gt;targetFC=arcpy.GetParameterAsText(0)&amp;nbsp; # this is the point file&lt;/P&gt;&lt;P&gt;targetKeyField=arcpyGetparameterAsText(1)&amp;nbsp; # this is the key field in the point file&lt;/P&gt;&lt;P&gt;newKeyID=arcpy.GetParameterAsText(2)&amp;nbsp; # must be duplicate of a string in targetKeyField&lt;/P&gt;&lt;P&gt;newField2 = arcpy.GetParameterAsText(3)&lt;/P&gt;&lt;P&gt;newField3 = arcpy.GetParamaterAsText(4)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;# Add new fields to table&lt;/P&gt;&lt;P&gt;in_table = targetFC&lt;/P&gt;&lt;P&gt;field_name2 = "Field_2"&lt;/P&gt;&lt;P&gt;field_name3 = "Field_3"&lt;/P&gt;&lt;P&gt;field_type = "TEXT"&lt;/P&gt;&lt;P&gt;arcpy.AddField_management(in_table, field_name2, field_type)&lt;/P&gt;&lt;P&gt;arcpy.AddField_management(in_table, field_name3, field_type)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;# Loop through targetFC to find a match between newKeyID and a string in targetKeyField&lt;/P&gt;&lt;P&gt;with arcpy.da.SearchCursor(targetFC, [targetKeyField, "SHAPE@"]) as cursor:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # insertCursor based on the match; duplicate the point in the table&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Populate the new cursor with the new parameters (newField2, newField3, etc)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Error if the newParcelID does not match a string in the targetKeyField&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # User is brought back to enter a new newKeyID string.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 28 Jul 2014 15:34:27 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/how-do-you-duplicate-a-point-within-a-shapefile/m-p/328840#M25578</guid>
      <dc:creator>DSelik</dc:creator>
      <dc:date>2014-07-28T15:34:27Z</dc:date>
    </item>
    <item>
      <title>Re: How do you duplicate a point within a shapefile using Python?</title>
      <link>https://community.esri.com/t5/python-questions/how-do-you-duplicate-a-point-within-a-shapefile/m-p/328841#M25579</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;If your trying to insert the feature simply based on the old stuff its a pretty straight forward&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;you'll want to create the insert cursor defined with your insert fields and just fill in the shape information from your old one into the new one.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;For returning an error only if there is no match, I find it easier to stick it in is own subroutine in and return an error only if one doesn't match&lt;/P&gt;&lt;PRE __default_attr="python" __jive_macro_name="code" class="jive_macro_code _jivemacro_uid_14067281522673876 jive_text_macro" jivemacro_uid="_14067281522673876" modifiedtitle="true"&gt;
&lt;P&gt;#Only use shape@ if your insert into a table, otherwise its not needed.&lt;/P&gt;
&lt;P&gt;#Unless you want to keep the XY coordinates, then create a field and populate those too&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;def findMatch(in_table,field_name2,field_name3,targetFC,targetKeyField,newKeyID,newField2,newField3):&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; with arcpy.da.InsertCursor(in_table,[field_name2,field_name3,"SHAPE@"]) as ic:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; with arcpy.da.SearchCursor(targetFC,[targetKeyField,"SHAPE@") as sc:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Loop the features in your feature&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for row in sc:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Find match&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if row[0] == newKeyID:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #i don't know what your insertvalues are, but they go below in the first two spots as defined in your cursor&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #For each item you want to add, you'll need to add it to your insert cursor&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Also, keep that extra comma at the end of the insert.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ic.insertRow((newField2,newField3,row[2],))&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.AddMessage("{} added".format(newKeyID))&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return True&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #This runs if not match found&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.AddMessage("{} No match".format(newKeyID))&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return False&lt;/P&gt;
&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;then you call it using the following, filling in the values with your desired inputs:&lt;/P&gt;&lt;PRE __default_attr="python" __jive_macro_name="code" class="jive_macro_code _jivemacro_uid_14067286079376328 jive_text_macro" jivemacro_uid="_14067286079376328"&gt;&lt;STRONG style="color: rgba(0, 0, 0, 0); font-size: 12px; font-family: Consolas, 'Courier New', Courier, mono, serif;"&gt;findMatch(in_table,field_name2,field_name3,targetFC,targetKeyField,newKeyID,newField2,newField3)&lt;/STRONG&gt;
&lt;P&gt;&lt;/P&gt;
&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;you'll have to play around to make it work exactly how you want but it should put you on the right track.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Cheers&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 30 Jul 2014 13:57:52 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/how-do-you-duplicate-a-point-within-a-shapefile/m-p/328841#M25579</guid>
      <dc:creator>CodyScott</dc:creator>
      <dc:date>2014-07-30T13:57:52Z</dc:date>
    </item>
  </channel>
</rss>

