Q:

Create points with attributes from Cursor

I have a table imported from Excel that has three attribute columns (City, State, ZIP) as well as X/Y columns that have been added.
I have a cursor that goes through the records in the table and creates points
point = arcpy.Point()
pointGeometryList = []

with arcpy.da.SearchCursor("in_memory/xxExcelOutput", ["POINT_X", "POINT_Y", "CITY", "STATE", "ZIP_CODE"]) as cursor:
    for row in cursor:
        point.X = row[0]
        point.Y = row[1]

        pointGeometry = arcpy.PointGeometry(point)
        pointGeometryList.append(pointGeometry)

arcpy.CopyFeatures_management(pointGeometryList, "in_memory/pointFC")

How can I add the attributes from my table when I create the points?  I know the following doesn't work, but is there a way to do it within the same cursor?
    for row in cursor:
        point.X = row[0]
        point.Y = row[1] 
        point.ZIP = row[4]

The only way I've come up with so far is to AddField() to the new feature class, and then UpdateCursor() the extra attributes with another search cursor.  While this way works OK for my test data (I have some data in my table, for proof of concept), I am concerned that I may end up with multiple points in the same location that have different attributes - I need to ensure that each point is created with the matching attributes.  

A:

Okay I not sure if this is the answer that you want. but if you are not bound to using an excel sheet, just simply convert your file to csv and read it with the csv module. 
import csv
import arcpy
import os
arcpy.env.overwriteOutput = True
gdb = r'gdb'
p = r'path\\' #for path
fcname = "nameyouwant"
centers  = arcpy.CreateFeatureclass_management(gdb,fcname,"POINT",'','',"ENABLED",4326)
arcpy.AddField_management(fcname,"City","TEXT")
arcpy.AddField_management(fcname,"State","TEXT")
arcpy.AddField_management(fcname,"Zip","TEXT")
arcpy.AddField_management(fcname,"X","TEXT")
arcpy.AddField_management(fcname,"Y","TEXT")
with open(os.path.join(p,'csvname.csv')) as noury:
    reader = csv.DictReader(noury)
    for row in reader:
        point = arcpy.PointGeometry(arcpy.Point(row["POINT_X"],row["POINT_Y"]),arcpy.SpatialReference(4326))
        #projected = point.projectAs(arcpy.SpatialReference(SRID)) if you want to project
        with arcpy.da.InsertCursor(fcname,("City","State","Zip","X","Y","SHAPE@")) as cur:
            sert = (row['CITY'],row['STATE'],row['ZIP_CODE'],row["POINT_X"],row["POINT_Y"],point) #or use the projected point if you want it projected
            cur.insertRow(sert)

