Python 2.7 writing list to CSV data some data is unicode, some data is string. Which is more efficient for output to dbf table in geodatabase?

Viewed 44

There are a couple of general questions included - newbie python user.

I am needing to get my labels list ultimately into a dbf table. I'm using python 2.7 and am not able to download any other modules. It doesn't look like there is a direct export from list to dbf so my output is list to csv then to dbf table. Is there an easier way??

For dbf output is it better to have data in unicode or string? Data doesn't have special non-unicode characters. I've tried converting data to all string & get unexpected outputs. (See commented out lines on script - trials & errors shown in script).

Last - I'm noticing my script is running / looping twice now and I can't figure out why - I am only calling the def statements once.

fields = ['ID', 'ADMIN_ORG', 'RTE_CN']
labels = []


def newlabel():
    with arcpy.da.SearchCursor(fc, fields) as sc:
        for row in sc:
            if row[1].startswith('01'):
            # if row[1].startswith('01', '02', '03'):
            #   TypeError: slice indices must be integers or None
            #              or have an __index__ method
                labels.append(row[0])
            if row[1].startswith('04'):
                 labels.append(
                     '{}'.format(
                             row[0]
                             .replace("-ADMIN","")
                             .replace('-A-ADMIN','')
                             .replace('-PARKING','')[2:]
                             .lstrip('0')
                             .replace('.', '-')
                             .lstrip(ascii_letters)
                             ))
            elif row[1].startswith('10'):
                 labels.append(
                     '{}'.format(
                             row[0]
                             .lstrip('0')
                             .replace('.', '-')
                             )) #.lstrip(ascii_letters)))
            #else:
                #labels.extend(row[0])
    #print(labels)#Some data in unicode, some not. Unicode issue possibly?
    print('new labels done')


def dbfexport():
    with open('roadcore2.csv', 'wb') as output:#setting up to write csv
        writer = csv.writer(output, delimiter=',')
        writer.writerow(fields) #Header sucessful
        for row in labels:
            # writer.writerow(row) #Printing single characters - auto adding in comma after each. 
            # writer.writerow([row[0]]) #Printing single characters - no comma
            # writer.writerow(row[0]) #builtin_function_or_method object has no attribute '__getitem__'
            # writer.writerow(str.join(row[0])) #requires a string object but got a unicode.
            # writer.writerow(str.join('', row)) #Still printing individual characters
            writer.writerow([row]) #SUCCESS in writing data BUT looping entire script twice!!
            
    print('hmmmm..working?')


if __name__ == '__main__':
    newlabel()
    dbfexport()

end = time.time()

print(end-start)
0 Answers
Related