I need to compare fields from two separate tables and mark them with copy or no copy. It seems easy enough but i am having a hard time and not sure what I am doing wrong. I just get all "No" in the Copy field.
Here is what i have.
fc1 = 'C:\Temp\blah1.dbf' fc2 = 'C:\Temp\blah2.dbf' cursor1 = arcpy.da.SearchCursor(fc1, ["Field1", "Copy"]) cursor2 = arcpy.da.SearchCursor(fc2, ["Field2"]) with arcpy.da.UpdateCursor(fc1, ['Field1', 'Copy']) as cursor: for row in cursor1: for row2 in cursor2: if row.strip().lower()!= row.strip().lower(): for row1 in cursor1: row = 'No' else: row = 'Copy' cursor.updateRow(row1) del cursor
Solved! Go to Solution.
Does something like this help:
fc1 = "C:\Temp\blah1.dbf" fld1 = ["Field1", "Copy"] fc2 = "C:\Temp\blah2.dbf" fld2 = ["Field2"] valueList = [r for r in arcpy.da.SearchCursor(fc2, fld2)] with arcpy.da.UpdateCursor(fc1, fld1) as cursor: for row in cursor: if row in valueList: row = 'Copy' # May wish to swap 'Copy' and 'No' else: row = 'No' cursor.updateRow(row)
Are the values in "Field1" and "Field2" unique identifiers and can only appear once in each feature? If so, you could read the value of fc2's Field2 into a list/dictionary. Then use an update cursor to mark the Copy field if Field1 is not in the Field2 list.
No Field1 and Field2 are not unique identifiers. I was trying compare fc1 Field1 to fc2 Field2 to see if there is duplicate/copy.
I tried working with a list/dictionary but it didn't work out and these seems the simplest.
fc1 = 'C:\Temp\blah1.dbf' fc2 = 'C:\Temp\blah2.dbf' fc1List =  with arcpy.da.SearchCursor(fc2,["Field2"]) as cursor: fc1List = [row for row in cursor] tableFieldList = ["Field1", "Copy"] with arcpy.da.UpdateCursor(fc1, tableFieldList) as tablecursor: for tablerow in tablecursor: if tablerow in fc1List: tablerow = 'Copy' else: tablerow = 'No' tablecursor.updateRow(tablerow)
If the tables are generally duplicates with some differences, it might be worth a try combining the tables into a gdb table, then use either
you can limit the fields to use in the comparison as well
If I'm reading the logic of this correctly then you should be able to find the rows having shared values between two tables in one pass with this tool:
Tony, both the tools can be used in a script, check the code samples but a Merge_management to a temporary table and a FindIdentical_management or DeleteIdentical_management might do the trick
You want to copy the value from the source if it's different than the destination value? How many rows are you working with? If it's a reasonable amount of data (less than 10000 maybe) I would just update everything no matter the value. If you always want the destination to match the source, just truncate and append everything. If you can't do that, just join the two and field calc the destination field to equal the source field.
No i don't want to copy the values i just want fc1 "Field1" to fc2 "Field2" and see if there is a match/ duplicate /copy and update fc1 "Copy" field with "Copy" or "No". There is probably about 4k records in each table.