#------------------------------------------------------------------------------- # Name: loadXLS # read Table 4 from 68 spreadsheets to get Unoccupied Dwellings # Purpose: read Stats spreadsheets into a Sqlite database that cannot # be read by FME, ArcGIS or anything other than Excel # saves writing out to CSV first # Author: kimo # # Created: 08/05/2014 # Copyright: (c) kimo 2014 # Licence: Creative Commons #------------------------------------------------------------------------------- import xlrd # installed with ArcGIS 10.2 by default import sys,os import re import glob import sqlite3 import arcpy # only needed for final message pat = re.compile("^[0-9]{6}") # pattern of AU code in AU name in Column 0 ("A") dType = {0:'Empty', 1:'Text', 2:'Number', 3:'Date', 4:'Boolean', 5:'Error', 6:'Blank'} def extract_tla(filename): '''extract Unoccupied Dwellings''' workbook = xlrd.open_workbook(filename) worksheet = workbook.sheet_by_name('Table 4') num_rows = worksheet.nrows num_cells = worksheet.ncols rec = 0 for curr_row in range(num_rows): curr_col = 0 cellAn = worksheet.cell_value(curr_row, curr_col) cell_type0 = worksheet.cell_type(curr_row, curr_col) if cell_type0 == 1 and pat.match(cellAn): a = str(worksheet.cell_value(curr_row,curr_col)) val = [a[0:6],a[7:]] for curr_col in range(1,4): count = worksheet.cell_value(curr_row,curr_col) if count == '-': n = 0 else : n = int(count) val.append(n) rec+=1 #print val insert_ud_row(udTable,val) # print "Records found",rec # fields au2013,auname,ud2001,ud2006,ud2013 return rec def create_ud_tab(conn,udTable): # (re-)create a table c = conn.cursor() c.execute('''DROP TABLE IF EXISTS '''+ udTable) c.execute('''CREATE TABLE '''+udTable+''' ( au text NOT NULL, auname text , ud2001 integer, ud2006 integer, ud2013 integer )''') conn.commit() c.close() return def insert_ud_row(outTab,row): '''insert a row requires a sqlite database to be connected and a cursor to be open ''' try: cmd = "INSERT INTO " + outTab + " VALUES (" + (",?"*(len(row)))[1:] + ")" # implied transaction already opened c.execute(cmd,row) except Exception,msg: print msg print row print cmd conn.rollback() conn.close() sys.exit() # ------------------------------------------------------------------------- if __name__ == '__main__': try: source_folder = sys.arg[1] except: source_folder = 'C:/data/census2013/source' os.chdir(source_folder) conn = sqlite3.connect('C:/data/census2013/dwelling.sqlite') udTable = 'DwellingEmptyAU' create_ud_tab(conn,udTable) # Open a cursor and insert records from all the spreadsheets c = conn.cursor() print "sqlite database successfully opened" trec = 0 lstXLS = glob.glob('*.xls') for x in lstXLS: rec = extract_tla(x) trec+=rec print rec,x conn.commit() c.close() conn.close() msg = '{} Total records inserted into {}'.format(trec,udTable) print msg arcpy.AddMessage(msg)
lstFiles = arcpy.ListFiles("*.xls") for file in lstFiles: arcpy.TableToTable_conversion(file + "\\" + "Sheet1$", outpath, "test.dbf")
Les membres connectés peuvent publier, suivre les mises à jour, et plus encore. Nouveau ici ? Inscrivez-vous gratuitement.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.