Mais

Convertendo csv para dbf

Convertendo csv para dbf


Eu tenho um python criado CSV que estou tentando transformar em um dbf, mas não está sendo lido corretamente pela ferramenta de conversão TABELA PARA TABELA. Eu seleciono o csv, defino a saída como XXX.dbf, mas a saída tem 1 campo. Ele contém o número de linhas de que preciso, mas os valores de cada linha são dados separados por vírgula. Não tenho espaços ou caracteres especiais.

Arcgis 10.1

Aqui está o PYTHON usado para criar a mesa. Esta é minha primeira vez usando o escritor CSV; talvez eu esteja implementando errado para alimentar o dbf.

# Este script procura em uma pasta definida por shapefiles e cria o início de um dicionário de dados. # Criador: David Campbell # Data: 12 de março de 2015 import arcpy, os, sys, csv, datetime, time from arcpy import env print 'Start @' + datetime.datetime.fromtimestamp (time.time ()). Strftime (' % H:% M:% S ') ################## Valores do usuário ################ project =' P747 'TSA_Table =' TSA_LB_V2 'CLS_Table = 'CLS_LB_V2' MDL_Table = 'MDL_LB_V2' ARIS_Table = 'ARIS_V5' RSA_Table = 'RSABLKS_V5' AVI_Table = 'AVI_ATTR_V2' FolderLocation = r " silver  clientes  Projetos  P747  3SData_LumberUBase  20Number1SDGata_V2Lgest230  NFocalUlumber  20Number1  SDLgest230  NFocalUlumber  20Number1  20Number_Focal  Núm. = "C:  Usuários  david  AppData  Roaming  ESRI  Desktop10.1  ArcCatalog  TFC.sde " Project_DB = "C:  Usuários  david  AppData   Roaming  ESRI  Desktop10.1  ArcCatalog  P747.sde  "ORA = 'ORATFC01' ############################ ############# open (os.path.join (FolderLocation, "DD.csv"), "w") FCView = FolderLocation + " FCView.lyr" env.workspace = FolderLocation SDELOC = SDELocal if arcpy.Exists (FolderLocation + " DD.csv"): arcpy.Delete_management (FolderLocation + " DD.csv ") # if arcpy.Exists (SDELOC +" DD_Table ") == False: # print" Tabela SDE não existe "if arcpy.Exists (SDELOC +" DD_Table "): arcpy.Delete_management (SDELOC +" DD_Table ") if arcpy.Exists (SDELOC +" DD_Table ") == True: imprimir" True "sys.exit () a =" ID, PROJECT_NO, DATA_NAME, DATA_TYPE, DATA_LOCATION, SOURCE_CONTACT_NAME, PROJECTION, DATUM, UNITS, DATA_PRECISION, TOLERANCE , SCALE_OF_CAPTURE, GENERATION_ORIGIN, FEATURE_DESC, COLUMN_NAME, FLDTYPE_NAME, COLUMN_WIDTH, COLUMN_DECIMAL, COLUMN_DESC "csvfile = FolderLocation +"  DD.csv "allrows = [] allrows.Table_Table, TS_Table, TS_Table, TS_Table, [] allrows.appendable, TS_Table_Table, TS_Table_Table, TS_Table, TS_Table [ARLTable, TS_Table_Table, TS_Table_Table, [] allrows_Table, TS_Table, TS_Table_Table (a) , RSA_Table] #SDETable = ['TSA_LB_V2', 'CLS_LB_V2', 'MDL_LB_V2', 'ARIS_V5', 'RSABLKS_V5', 'AVI_ATTR_V2'] x = 1 para r em arcpy.ListFiles ("*. Shp"): if: .Exists (FCView): arcpy.Delete_management (FCView) arcpy.MakeTableView_management (r, FCView) fields = arcpy.ListFields (r) desc = arcpy.Describe (r) para o campo nos campos: FN = field.name DataString = str ( x) + "," + projeto + "," + r + "," + desc.shapeType + "," + FolderLocation + "," + "," + desc.spatialReference.name + "," + desc.spatialReference.GCS.datumName + "," + "Metros" + "," + " , "+", "+", "+", "+", "+ FN +", "+ field.type +", "+ str (field.length) +", "+ str (field.precision) if field.type in ('String', 'SmallInteger'): UniqueValues ​​= Sorted (set ([XX [0] for XX in arcpy.da.SearchCursor (FCView, FN)])) if int (len (UniqueValues)) > = LargestNumberForUniqueValues: b = DataString + ", valores variáveis" allrows.append (b) x + = 1 if int (len (UniqueValues))  = LargestNumberForUniqueValues: f = ORASDEString + ", Valores variáveis" allrows.append (f) x + = 1 se int (len (UniqueValues2)) 

Você tem aspas no início e no final de cada linha, e nenhuma no meio, então o ArcGIS está interpretando cada linha como um único campo de texto. Remova as aspas e você deverá estar pronto para ler o arquivo.

Caso contrário, se você quiser uma solução programática para construir o arquivo DBF, dê uma olhada no Python dbfmódulo para escrever o arquivo DBF. Usandodbf.from_csvirá rapidamente converter um arquivo CSV em DBF na memória com

tabela = dbf.from_csv (caminho)

Ou escreva diretamente em um arquivo com onome do arquivoparâmetro

dbf.from_csv (caminho, "out_path.dbf")

É improvável que isso faça exatamente o que você deseja, pois pressupõe que a primeira linha do CSV não é cabeçalhos, mas sim dados, e que todos os campos são campos de string. Para algo mais complexo, você deve trabalhar com o Python embutido csvmódulo para ler os dados e especificar o formato da tabela antes de gravar os dados.


Uma possibilidade seria abrir seu .csv no Excel ou algo semelhante, salvá-lo com seus campos separados e, em seguida, abrir novamente no ArcMap. Seus campos devem ser separados dentro de sua tabela .dbf, com sorte