Take the 2-minute tour ×
Geographic Information Systems Stack Exchange is a question and answer site for cartographers, geographers and GIS professionals. It's 100% free, no registration required.

Using Arcpy in Python, I would like to return / print '0.15' from the following table: table

When I use the following code I get "(u'D', 0.20)" as my print statement in Python:

import arcpy
fc = "C:/Users/.../table_test2"
q = 'C'
with arcpy.da.SearchCursor(fc, ['Index_Score'], where_clause=q) as cursor:
    print row


(u'D', 0.20)

This is not what I am looking for as I am looking for the value '0.15'.

When I tried changing my query statement 'q' to: q = '"SA_ALL" = "C"' I get the error:

" Traceback (most recent call last):
File "<pyshell#143>", line 2, in <module>
for row in cursor:
RuntimeError: An expected Field was not found or could not be retrieved properly.    [table_test2]"

Can someone help me and explain what I am doing wrong? Also what does the 'u' mean in my first returned print statement?

share|improve this question

3 Answers 3

up vote 1 down vote accepted

You might look into using the AddFieldDelimiters function. It can make writing queries easier.

import arcpy

fc = "C:/Users/.../table_test2"
query = """{0} = '{1}'""".format(arcpy.AddFieldDelimiters(fc, "SA_ALL"), "C")

with arcpy.da.SearchCursor(fc, ("SA_ALL", "Index_Score"), query) as cursor:
    for row in cursor:
        print row[1]

Using just "C" is not a proper query.

share|improve this answer
    
I have tried using this method but I get no print statement nor any errors. query = """{0} = '{1}'""".format(arcpy.AddFieldDelimiters(fc, "SA_ALL"), "C") with arcpy.da.SearchCursor(fc, ("SA_ALL", "Index_Score"), query) as cursor: for row in cursor: print row[0] print tow[1] >>> –  Jelle Feb 18 at 16:57
    
@Jelle hmm I'm not sure why it wouldn't work because it's essentially the exact same query Ben Gosack suggested. –  ian Feb 18 at 17:10

This example uses a dictionary comprehension to convert your two fields into a dictionary and then simply prints the value based on your query check["C"]:

import arcpy

fc = r'C:\temp\test.gdb\test'

check = {row[0]: row[1] for row in arcpy.da.SearchCursor(fc, ("SA_ALL", "Index_Score"))}
print check["C"]

To answer the second part of your question, u'' indicates a unicode string data type.

share|improve this answer

There are a couple of issues that are occurring here. First of all formatting of a query string can be a bit tedious, the delimiter you use for the field name is dependent on the input data type (shapefile, personal geodatabase, file geodatabase). See additional documentation. For a file geodatabase the delimiter is a double quote, but the string delimiter is a single quote, to do this you will need to use escape characters or string formatting.

Try this:

'"SA_ALL" = \'C\''

The second issue is accessing the data element you want out of the cursor object. Add a for loop to iterate the rows returned in your cursor, even though you may only return one row. The returned object will be a list, so index the position of the item in that list. If you are still running into a format issue, use str(row[0]) or float(row[0]) to cast the output into the format you want.

with arcpy.da.SearchCursor(fc, ['Index_Score'], '"SA_ALL" = \'C\'') as cursor:
    for row in cursor:
        print row[0]
share|improve this answer
    
Thanks for your answer. This certainly did the trick. I am indeed using geodatabase files so I used excape characters. How would you use escape characters if I want to replace 'C' with a defined variable? –  Jelle Feb 18 at 16:56
    
@Jelle, I think you would then want to use the string format function: '"SA_ALL" = \'{0}\''.format(variable) –  Ben Gosack Feb 18 at 17:19

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.