Mehr

Csv in dbf konvertieren

Csv in dbf konvertieren


Ich habe eine von Python erstellte CSV-Datei, die ich in eine DBF umwandeln möchte, aber sie wird vom Konvertierungstool TABLE TO TABLE nicht richtig gelesen. Ich wähle die CSV-Datei aus, setze die Ausgabe auf XXX.dbf, aber die Ausgabe hat 1 Feld. Es enthält die Anzahl der Zeilen, die ich benötige, aber die Werte jeder Zeile sind die durch Kommas getrennten Daten. Ich habe keine Leerzeichen oder Sonderzeichen.

Arcgis 10.1

Hier ist das PYTHON, mit dem die Tabelle erstellt wurde. Dies ist das erste Mal, dass ich den CSV-Writer verwende; vielleicht implementiere ich es falsch, die dbf zu füttern.

#Dieses Skript sucht in einem definierten Ordner nach Shapefiles und erstellt den Anfang eines Datenwörterbuchs. # Ersteller: David Campbell # Datum: 12. März 2015 import arcpy, os, sys, csv,datetime, time from arcpy import env print 'Start @ ' + datetime.datetime.fromtimestamp(time.time()).strftime(' %H:%M:%S') ############## Benutzerwerte ############# 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"silverclientsProjectsP7473_2015 = "C:BenutzerdavidAppDataRoamingESRIDesktop10.1ArcCatalogTFC.sde" Project_DB = "C:BenutzerdavidAppData RoamingESRIDesktop10.1ArcCatalogP747.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 "SDE-Tabelle existiert nicht" if arcpy.Exists(SDELOC + "DD_Table"): arcpy.Delete_management(SDELOC + "DD_Table ") if arcpy.Exists(SDELOC + "DD_Table") == True: print "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.append, C , RSA_Table] #SDETable = ['TSA_LB_V2','CLS_LB_V2', 'MDL_LB_V2','ARIS_V5', 'RSABLKS_V5', 'AVI_ATTR_V2'] x = 1 für r in arcpy.ListFiles("*.pyshp"): .Exists(FCView): arcpy.Delete_management(FCView) arcpy.MakeTableView_management(r, FCView) fields = arcpy.ListFields(r) desc = arcpy.Describe(r) für Feld in Feldern: FN = field.name DataString = str( x) + "," + Projekt + ","+ r + "," + desc.shapeType + "," + FolderLocation + "," + "," + desc.spatialReference.name + "," + desc.spatialReference.GCS.datumName + "," + "Meters" + "," + " ," + "," + "," + "," + "," + FN + "," + field.type + "," + str(field.length) + "," + str(field.precision) if field.type in ('String', 'SmallInteger'): UniqueValues ​​= sortiert(set([XX[0] for XX in arcpy.da.SearchCursor(FCView, FN)])) if int(len(UniqueValues)) >= LargestNumberForUniqueValues: b = DataString + ", Variablenwerte" allrows.append(b) x += 1 if int(len(UniqueValues)) < LargestNumberForUniqueValues: für XX in UniqueValues: if XX ==": weiter c = DataString + ", " + str(XX) allrows.append(c) x += 1 else: e = DataString + ", 0 - X" allrows.append(e) x += 1 env.workspace = Project_DB für SDE in SDETable: für SDEField in arcpy.ListFields(SDE): SDE_FN = SDEField.name ORASDEString = str(x) + "," + project + "," + str(SDE) + ",SDE Table" + "," + ORA + " ," + "," + "," + "," + "," + "," + "," + "," + "," + "," + SDE_FN + "," + SDEField.t ype + "," + str(SDEField.length) + "," + str(SDEField.precision) if SDEField.type in ('String', 'SmallInteger'): UniqueValues2 = sorted(set([Y[0] for Y in arcpy.da.SearchCursor(SDE, SDE_FN)])) if int(len(UniqueValues2)) >= LargestNumberForUniqueValues: f = ORASDEString + ", Variablenwerte" allrows.append(f) x += 1 if int(len (UniqueValues2)) < LargestNumberForUniqueValues: für XXX in UniqueValues2: g = ORASDEString + ", " + str(XXX) allrows.append(g) x += 1 else: h = ORASDEString + ", 0 - X" allrows.append( h) x += 1 mit open(csvfile, "w") als Ausgabe: write = csv.writer(output, lineterminator="
") for val in allrows: Writer.writerow([val]) env.workspace = SDELOC if arcpy.Exists(FCView): arcpy.Delete_management(FCView) arcpy.MakeTableView_management(csvfile, FCView) arcpy.TableToTable_conversion(FCView, SDELOC, "DD_Table") print 'Completed @ ' + datetime.datetime.fromtimestamp(time.time .) ()).strftime('%H:%M:%S')

Am Anfang und Ende jeder Zeile stehen Anführungszeichen und keine dazwischen, sodass ArcGIS jede Zeile als einzelnes Textfeld interpretiert. Entfernen Sie die Anführungszeichen und Sie sollten die Datei lesen können.

Wenn Sie andernfalls eine programmatische Lösung zum Erstellen der DBF-Datei wünschen, sehen Sie sich die Python-Datei an dbfModul zum Schreiben der DBF-Datei. Verwenden vondbf.from_csvkonvertiert schnell eine CSV- in eine DBF-Datei im Speicher mit

Tabelle = dbf.from_csv(Pfad)

Oder schreiben Sie direkt in eine Datei mit demDateinamenParameter

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

Dies wird jedoch wahrscheinlich nicht genau das tun, was Sie möchten, da davon ausgegangen wird, dass die erste Zeile der CSV keine Kopfzeilen, sondern Daten sind und dass alle Felder Zeichenfolgenfelder sind. Für etwas komplexeres sollten Sie mit dem eingebauten Python arbeiten csvModul, um die Daten zu lesen, und legen Sie das Tabellenformat selbst fest, bevor Sie die Daten schreiben.


Eine Möglichkeit wäre, Ihre .csv-Datei in Excel oder ähnlichem zu öffnen, sie mit Ihren getrennten Feldern zu speichern und dann wieder in ArcMap zu öffnen. Ihre Felder sollten in Ihrer .dbf-Tabelle hoffentlich getrennt sein


Schau das Video: Convert Excel to CSV File. XLSX to CSV. Excel to Text File Comma Delimited