I am attempting to write a script so that instead of hardcoding the name of the new field as "CONFIVALUE" for the confidence value, I want to use the name of the third column in the header of the input text file.
For example, let's say that the first line of the input text file looks like this:
Latitude,Longitude,Confidence
In this case the field name should be "Confidence".
If the first line looked like this:
Latitude,Longitude,ConfidValue
Then the field name should be "ConfidValue".
The error if i have conField indexed as conField[2]:
Traceback (most recent call last):
File "C:\Users\Aleah\Desktop\PythonScripts\Lab7_Q5.py", line 22, in <module>
IndexError: list index out of range
The error i am receiving if i remove the index is:
Traceback (most recent call last):
File "C:\Program Files (x86)\Wing IDE 101 4.1\src\debug\tserver\_sandbox.py", line 27, in <module>
File "C:\Program Files (x86)\ArcGIS\Desktop10.3\arcpy\arcpy\management.py", line 3246, in AddField
raise e
RuntimeError: Object: Error in executing tool
import arcpy
work = "C:\Scripts\Lab 7 Data\WildlandFires.mdb"
arcpy.env.workspace = work # Set the workspace to the geodatabase
arcpy.env.overwriteOutput = True
iFile = "C:\Scripts\Lab 7 Data\NorthAmericaWildfires_2007275.txt"
output = "NewFires.shp"
threshold = 99
f = open(iFile, 'r')# input text file C:\Scripts\Lab 7 Data\NorthAmericaWildfires_2007275.txt in "read" mode
lstFires = f.readlines() # Read the lines of fire
conField = []
for line in f:
comma = line.split(',')
conField = comma
print conField[2]
field = ["SHAPE@", conField[2]] # represents the field names for each row in the feature class
# Process: Create Feature Class
arcpy.CreateFeatureclass_management(work, output, "POINT")
arcpy.AddField_management(output, conField[2], "FLOAT")
cursor_new = arcpy.da.InsertCursor(output, field)# add the new points that you will create to the "NewFires" feature class
f.close() # close the file
del cursor_new # release the cursor lock on the feature class
Solved! Go to Solution.
con_val = lstFires[0].strip().split(',')[-1]
Aleah, perhaps you can format your code Code Formatting the Basics++
Since "line 22" is generating the error, what exactly is line 22?
Also, does print conField[2] print the result you expect?
comma = line.split(',')
conField = comma
print conField[2]
It appears to be a circular way around to splitting the line reference by the ',' then slicing it to get the last entry, it would be just as well be done as
conField= line.split(',')[2]
conField = []
for line in f:
conField = line.split(',')[2]
field = ["SHAPE@", conField] # represents the field names for each row in the feature class
# Process: Create Feature Class
arcpy.CreateFeatureclass_management(work, output, "POINT")
arcpy.AddField_management(output, conField, "FLOAT")
Traceback (most recent call last):
File "C:\Program Files (x86)\Wing IDE 101 4.1\src\debug\tserver\_sandbox.py", line 25, in <module>
File "C:\Program Files (x86)\ArcGIS\Desktop10.3\arcpy\arcpy\management.py", line 3246, in AddField
raise e
RuntimeError: Object: Error in executing tool
As Dan suggested, please use code formatting, It makes it easier for people to read and for specific comments about the code.
Your first line, cornfield = [], is unnecessary because str.split() returns a list.
You are using file.readlines(), emphasis on plural, that reads "until EOF." In your loop:
for line in f:
conField = line.split(',')[2]
You are looping through the entire file contents, and by the time the loop finishes, conField contains the last line, not the first.
If you put a print statement after the loop is complete, what values are stored in conField?
conField = []
for line in f:
conField = line.split(',')[2]
field = ["SHAPE@", conField] # represents the field names for each row in the feature class
# Process: Create Feature Class
arcpy.CreateFeatureclass_management(work, output, "POINT")
arcpy.AddField_management(output, conField, "FLOAT")
Traceback (most recent call last):
File "C:\Program Files (x86)\Wing IDE 101 4.1\src\debug\tserver\_sandbox.py", line 25, in <module>
File "C:\Program Files (x86)\ArcGIS\Desktop10.3\arcpy\arcpy\management.py", line 3246, in AddField
raise e
RuntimeError: Object: Error in executing tool
I assume that since you read all lines into the list, setting conField[2] to the third value in each line will ultimately result in the final value of your file, not the field name from the first line. You can access the first line of the file with f.readline() (reads only one line) or f.readlines()[0].
Also, you may be running into a problem if Python is reading a new line character at the end of your line. Try printing the split list to see the new line character:
>>> f = open(r'C:\junk\log.txt', 'r')
... my_list = f.readlines()
... print my_list[0]
... print my_list[0].split(',')
...
field1,field2,field3
['field1', 'field2', 'field3\n']
f = open(iFile, 'r')# input text file C:\Scripts\Lab 7 Data\NorthAmericaWildfires_2007275.txt in "read" mode
lstFires = f.readlines() # Read the first lines of file
print (lstFires[0])
print (lstFires[0].strip().split(','))
This gives me :
Latitude,Longitude,Confidence
['Latitude', 'Longitude', 'Confidence']
But how can I access the Confidence string only, to be used later in arcpy.AddField_management
con_val = lstFires[0].strip().split(',')[-1]