1

I have a folder with multiple text files. I am writing a code that reads all of the text files, and creates a point feature class (i.e. a shapefile) for each one. The text files are all tab delineated with the same set up "Id, name, type, lat, long" I have posted the code I have below. A shapefile is created for each text file, and the fields are created for the attribute table, however, the points are not created, and the rows are not being inserted into the attribute table. I had it working for an individual text file but I would like to do it for multiple text files.

#importing arcpy and os
import arcpy, os
from arcpy import env

arcpy.env.overwriteOutput = True

Location = r"C:\temp"

# Set environment settings
env.workspace = Location

for file in os.listdir(Location):
    if file.endswith(".txt"):
        try:
            fcName = os.path.splitext(file)    
            outName = fcName[0]  + '.shp'                                              
            outFolder = r'c:/temp/Data'                        

            #Creating the feature class
            datasetCreate = arcpy.CreateFeatureclass_management(outFolder, outName, "Point", "", "", "")
            cursor = arcpy.InsertCursor(datasetCreate)

            #Creating the fields for the attribute table
            arcpy.AddField_management(datasetCreate, "Name", "TEXT", "", "", 40)
            arcpy.AddField_management(datasetCreate, "Type", "TEXT", "", "", 20)
            arcpy.AddField_management(datasetCreate, "Lat", "DOUBLE", "", "", 20)
            arcpy.AddField_management(datasetCreate, "Long", "DOUBLE", "", "", 20)

            #Open the text file and read it 
            textfile = open(file, "r")

            #Create a variable for the headerline
            headerline = textfile.readline()

            #Get rid of the headerline, and split the text file into columns
            valueList = headerline.strip().split("\t")
            print valueList
            Lat = valueList.index("Lat")
            Long = valueList.index("Long")
            Name = valueList.index("Name")
            Type = valueList.index("Type")
            ID = valueList.index("ID")

            #Insert a cursor using arcpy  
            for point in textfile.readlines():
                segmentedPoint = point.split("\t")
                latvalue = segmentedPoint[Lat]
                longvalue = segmentedPoint[Long]
                namevalue = segmentedPoint[Name]
                typevalue = segmentedPoint[Type]
                idvalue = segmentedPoint[ID]

                #Create a point object and set the lat and long fields to the x and y coordinates    
                vertex = arcpy.CreateObject("Point")
                vertex.X = latvalue
                vertex.Y = longvalue

                #Use the cursor to insert each new row for the attribute table  
                feature = cursor.newRow()      
                feature.shape = vertex
                feature.setValue("ID", idvalue)
                feature.setValue("Name", namevalue)
                feature.setValue("Type", typevalue)
                feature.setValue("Lat", latvalue)
                feature.setValue("Long", longvalue)
                cursor.insertRow(feature)

        # If an error occurred print the message to the screen
        except:
            # If an error occurred print the message to the screen
            print arcpy.GetMessages()            

            #delete the cursor
            del cursor
3
  • 1
    try with the "del cursor" in the "try:" loop and not in the "except:" loop Commented Feb 17, 2014 at 7:01
  • 1
    also it would be much easier with arcpy.da.insertcursor instead of arcpy.insertcursor Commented Feb 17, 2014 at 7:02
  • I think that Python code snippets are always easier to debug when try/except statements are removed because they can mask otherwise useful error messages. Commented Dec 4, 2019 at 0:52

0

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.