Daha çox

Geodat verilənlər bazasındakı xüsusiyyət siniflərini CSV-lərə ixrac edin


ArcGIS-də "ASCII-yə Xüsusiyyət Atributunu İxrac et" istifadə edərək bir geodatabase daxilindəki xüsusiyyət siniflərini CSV formatına ixrac etməyə çalışıram. Aşağıdakı xətanı alıram

Traceback (son zəng son): "c:  program files (x86)  arcgis  desktop10.2  ArcToolbox  Scripts  ExportXYV.py" faylı, 159 sətir,  export = setupXYV () File "c:  program files (x86)  arcgis  desktop10.2  ArcToolbox  Scripts  ExportXYV.py", line 49, setupXYV outFieldNames = outFieldNames) File "c:  program files (x86)  arcgis  desktop10.2  ArcToolbox  Scripts  ExportXYV.py ", satır 129, exportXYV formatValue = LOCALE.format (localeDict [field], value)" C:  Python27  ArcGIS10.2  lib  locale.py ", sətir 196, formatda dönüş _format (faiz, dəyər, qruplaşdırma, pul, * əlavə)" C:  Python27  ArcGIS10.2  lib  locale.py "Dosyası, sətir 202, _format formatında = yüzdə% dəyər TypeError : simli formatlaşdırma zamanı bütün mübahisələr çevrilmir

Budur istifadə etdiyim piton skriptidir

arcpy-dən arcpy idxal env import os, sys arcpy.CheckOutExtension ("məkan") arcpy.env.overwriteOutput = Doğru # Ətraf mühit ayarlarını iş yerinə qoyun = r'L:  Simulation  Output  PoolVariables.gdb '# Yerli dəyişənləri seçin OutWorkspace = r'L:  Simulation  Output  CreateCSV 'feature_classes = [] arcpy.da.Walk-dakı dirpath, dirnames, fayl adları üçün (iş sahəsi, datatype = "FeatureClass", type = "Point"): fayl adlarında fayl adı üçün: feature_classes. əlavə et (os.path.join (dirpath, dosya adı)) #print xüsusiyyət_classes # xüsusiyyət_classes siyahısını nəzərdən keçirin: xüsusiyyət_classesdakı fc üçün: field_names = [f.name for f in arcpy.ListFields (fc)] print field_names # arcpy.ExportXYV_stats (fc, field_names, "COMMA",) name = os.path.basename (fc) # Yalnız FC əsas ad arcpy.ExportXYv_stats çıxarın (fc, field_names, "COMMA", ad, "ADD_FIELD_NAMES") xaricində: print arcpy.GetMessages ()

Kimsə burada baş verənləri izah edə bilərmi?


Problemi görürəm ... hansı format seçilməsindən asılı olmayaraq .dbf yazılır. Bu alətləri son dəfə istifadə etdiyimdən bəri bu, əlbəttə ki, dəyişdi. Pythonda olduğunuzu görmək bəlkə də bir az rutin burada kömək edə bilər:

def WriteCsv (InFC, OutTab): çap ("% s-dən% s-yə ixrac"% (InFC, OutTab)) açıq (OutTab, 'w') ilə OutFile olaraq: FieldNames = [x.name for x for arcpy.ListFields ( InFC)] # sahələri adlara çevirin ... # forma sahəsini atlayın, onda (desc.datasetType == 'FeatureClass'): cəhd edin: FieldNames.remove (az.) Şəklində yaxşı çap olunmaz. shapeFieldName) xaricində: arcpy.AddWarning ("Forma sahəsini atlamaq olmur, bəlkə də mövcud deyil") # başlıq sətrini mətn sənədinə yazdırın OutFile.write (','. join (FieldNames)) # vergül sahəsini formatlayın arcpy.da.SearchCursor (InFC, FieldNames) ilə ScF kimi OutFile.write (' n') # yeni sətir adlandırır: Scurdakı sıra üçün: OutFile.write (','. join (map (str, row)))) # vergül satırı formatlayın OutFile.write (' n') # yeni sətir

Hansı ki, proqramınızla belə interfeys yaradacaq:

import os, sys, arcpy # arcpy-dən import env # lazım deyil - bu skriptdə dolayısı ilə göstərilmişdir # arcpy.CheckOutExtension ("mekansal") # ehtiyac yoxdur - arcpy.sa alətləri istifadə edilməyib arcpy.env.overwriteOutput = True def WriteCsv (INFC) , OutTab): OutFile olaraq açıq (OutTab, 'w') ilə: FieldNames = [arcpy.ListFields (InFC) içərisində x üçün x.name]] sahələri adlara çevirin… desc = arcpy.Describe (InFC) əgər (az. DatabaseType == 'FeatureClass'): cəhd edin: FieldNames.remove (desc.shapeFieldName) xaricində: arcpy.AddWarning ("Forma sahəsini atlamaq olmur, bəlkə də mövcud deyil") OutFile.write (','. join (FieldNames )) # vergül formalı sahə adları OutFile.write (' n') # arcpy.da.SearchCursor (InFC, FieldNames) ilə Scur kimi yeni sətir: Scur sırası üçün: OutFile.write (','. join (map) (str, sıra))) # vergül satırı formatlaşdırın OutFile.write (' n') # yeni sətir # Ətraf mühit parametrlərini təyin edin iş sahəsi = r'L:  Simulation  Output  PoolVariables.gdb '# Yerli dəyişənləri təyin edin OutWorkspace = r 'L:  Simulation  Output  CreateCSV' feature_classes = [] dirpath, dirnames, file üçün arcpy.da.Walk'dakı adlar (iş sahəsi, məlumat növü = "FeatureClass", yazın = "Nöqtə"): fayl adlarındakı fayl adı üçün: xüsusiyyət_classes.append (os.path.join (dirpath, fayl adı)) # Xüsusiyyət_classes siyahısını nəzərdən keçirin: xüsusiyyət_classes-dəki fc üçün: name = os.path.join (outWorkspace, os.path.basename (fc) + ".csv") WriteCsv (fc, name) istisna olmaqla: print arcpy.GetMessages ()

Bir neçə göstərici:

  • Istifadə olunur'.'. qoşulun (xəritə (str, sıra))bir yığın daşma postundan gəlir (Mark Biek'e təşəkkür edirəm)xəritəsatır varsa, vacibdir hər hansı nömrələri (FID kimi) bütün siyahını sətirlərin siyahısına çevirmək.
  • Xətt ayırıcı üçün ' n' istifadəsi bu yığın daşqın postu tərəfindən dəstəklənir (sorin sayəsində), görünür python nə edəcəyinizi başa düşəcək və düzgün simvol əlavə edəcəyi üçün os.linesep ehtiyac yoxdur. hər halda ... Mac və ya Linux istifadə etmirəm, ona görə təsdiqləyə bilmirəm.

Belə bir şeydən böyük bir uğurla istifadə edirəm.

arcpy.da.Walk-da dirpath, dirnames, fayl adları üçün arcpy, os, csv inTables = r "pathToWorkspace" import (inTables, datatype = "Table", type = "ALL"): fileNames for tableName: print " "+ tableName +" to "+ newTable arcpy.Append_management (os.path.join (dirpath, tableName), newTable," NO_TEST ") CSVFile = r" pathToOutputCSV.csv "fields = arcpy.ListFields (newTable) fieldNames = [field . sahədəki sahə adı] ilə açıq (CSVFile, 'w') f: dw = csv.DictWriter (f, fieldNames) dw.writeheader () arcpy.da.SearchCursor (newTable, fieldNames) ilə kursor kimi: sıra üçün kursorda: dw.writerow (dict (zip (fieldNames, Utf8EncodeArray (sıra))))) "CSV sənədinə" çevrilmişdir "+ masterTable +" yazdır! " del sıra, kursor


Videoya baxın: Verilənlər Bazası mövzusunun praktiki məsələlərinin həlli (Oktyabr 2021).