Last week I posted about creating a csv file containing coordinates projected on the fly. Seeing as I had to update the files as the projection information changed, I decided I might as well optimise my code. I managed to halve the amount of code and not write anything temporary to disk as the final output I want is non-spatial anyway.
''' Created on 22 Sep 2014 @author: Cindy Williams Project coordinates on the fly and write to csv ''' import arcpy import csv import os arcpy.env.overwriteOutput = True fld = r"C:\Some\Arb\Folder" sr_cape = arcpy.SpatialReference(r"C:\Some\Arb\Folder\cape17.prj") sr_mines = arcpy.SpatialReference(r"C:\Some\Arb\Folder\Schwarzeck17_mines.prj") fields = ["Field3", "SHAPE@XY"] x_constant = 89 y_constant = 2000018 # Specify topdown=True so that it does not process the created csvs for root, dirnames, filenames in os.walk(fld, topdown=True): for f in filenames: if f.endswith(".csv"): print "Processing " + f cur_csv = os.path.join(root, f) lyr = "XY_Layer" # Create XY Layer in the original CS arcpy.management.MakeXYEventLayer(cur_csv, "Field1", "Field2", lyr, sr_cape) print "\tCreated XY Event Layer" # Output csv filename created from splitting current csv filename final_csv = os.path.join(fld, "Schwarzeck17_" + f.rpartition(" ")[2]) with open(final_csv, 'wb') as csvfile: csvwriter = csv.writer(csvfile) # Use a cursor to project the coordinates to the new CS with arcpy.da.SearchCursor(lyr, fields, "#", sr_mines) as cursor: for row in cursor: # Apply the constant and write to csv csvwriter.writerow([row[1][0] - x_constant, row[1][1] - y_constant, row[0]]) print "Processed " + final_csv # Clean up arcpy.management.Delete(lyr) print "Script complete."