أكثر

تصدير فئات المعالم في قاعدة البيانات الجغرافية إلى ملفات CSV

تصدير فئات المعالم في قاعدة البيانات الجغرافية إلى ملفات CSV


أحاول تصدير فئات المعالم داخل قاعدة بيانات جغرافية إلى تنسيق CSV باستخدام "تصدير سمة سمة إلى ASCII" في ArCGIS. اتلقى الخطأ التالي

Traceback (آخر مكالمة أخيرة): ملف "c:  program files (x86)  arcgis  desktop10.2  ArcToolbox  Scripts  ExportXYV.py" ، السطر 159 ، في  export = setupXYV () File "c:  program files (x86)  arcgis  desktop10.2  ArcToolbox  Scripts  ExportXYV.py" ، السطر 49 ، في setupXYV outFieldNames = outFieldNames) File "c:  program files (x86)  arcgis  desktop10.2  ArcToolbox  Scripts  ExportXYV.py "، السطر 129 ، بتنسيق exportXYVValue = LOCALE.format (localeDict [حقل] ، قيمة) ملف" C:  Python27  ArcGIS10.2  lib  locale.py "، السطر 196 ، بتنسيق إرجاع _format (نسبة مئوية ، قيمة ، تجميع ، نقدي ، * إضافي) ملف" C:  Python27  ArcGIS10.2  lib  locale.py "، السطر 202 ، بتنسيق _format = النسبة المئوية للقيمة TypeError : لم يتم تحويل جميع الوسائط أثناء تنسيق السلسلة

هذا هو نص Python الذي أستخدمه

استيراد arcpy من arcpy import env import os ، sys arcpy.CheckOutExtension ("spatial") arcpy.env.overwriteOutput = True #Set environment settings workspace = r'L:  Simulation  Output  PoolVariables.gdb '# تعيين المتغيرات المحلية outWorkspace = r'L:  Simulation  Output  CreateCSV 'feature_classes = [] لـ dirpath ، dirnames ، أسماء الملفات في arcpy.da.Walk (مساحة العمل ، نوع البيانات = "FeatureClass" ، النوع = "Point"): لاسم الملف في أسماء الملفات: feature_classes. append (os.path.join (dirpath، filename)) #print feature_classes # Loop through feature_classes list try: for fc in feature_classes: 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) # استخراج اسم أساس FC فقط arcpy.ExportXYv_stats (fc، field_names، "COMMA"، name، "ADD_FIELD_NAMES") باستثناء: طباعة arcpy.GetMessages ()

هل يمكن لأحد أن يشرح ما يحدث هنا؟


أرى المشكلة ... بغض النظر عن الشكل الذي يتم اختياره ، تتم كتابة .dbf. حسنًا ، لقد تغير ذلك بالتأكيد منذ آخر مرة استخدمت فيها هذه الأدوات. إن رؤيتك وأنت في بيثون ربما قد يساعدك روتين بسيط هنا:

def WriteCsv (InFC، OutTab): طباعة ("تصدير٪ s إلى٪ s"٪ (InFC، OutTab)) مع فتح (OutTab، 'w') كـ OutFile: FieldNames = [x.name لـ x في arcpy.ListFields ( InFC)] # تحويل الحقول إلى أسماء ... # تخطي حقل الشكل ، فلن يطبع جيدًا على أي حال desc = arcpy.Describe (InFC) if (desc.datasetType == 'FeatureClass'): جرب: FieldNames.remove (وصف. shapeFieldName) باستثناء: arcpy.AddWarning ("تعذر تخطي حقل الشكل ، ربما لم يكن موجودًا") # اطبع صف الرأس إلى الملف النصي OutFile.write ('،'. Join (FieldNames)) # قم بتنسيق الحقل أسماء OutFile.write (' n') # سطر جديد مع arcpy.da.SearchCursor (InFC، FieldNames) كـ Scur: للصف في Scur: OutFile.write ('،'. Join (map (str، row))) # تنسيق الفاصلة للصف OutFile.write (' n') # سطر جديد

التي من شأنها أن تتفاعل مع برنامجك مثل هذا:

import os، sys، arcpy # من arcpy import env # not needed - محدد ضمنياً في هذا البرنامج النصي # arcpy.CheckOutExtension ("spatial") # غير مطلوب - لا توجد أدوات arcpy.sa مستخدمة arcpy.env.overwriteOutput = True def WriteCsv (InFC ، OutTab): مع فتح (OutTab، 'w') كـ OutFile: FieldNames = [x.name for x in arcpy.ListFields (InFC)] # تحويل الحقول إلى أسماء… desc = arcpy.Describe (InFC) if (desc. datasetType == 'FeatureClass'): جرب: FieldNames.remove (desc.shapeFieldName) باستثناء: arcpy.AddWarning ("تعذر تخطي حقل الشكل ، ربما لم يكن موجودًا") OutFile.write ('،'. Join (FieldNames) )) # تنسيق فاصلة أسماء الحقول OutFile.write (' n') # سطر جديد مع arcpy.da.SearchCursor (InFC، FieldNames) كـ Scur: للصف في Scur: OutFile.write ('،'. انضم (خريطة (str، row))) # تنسيق فاصلة للصف OutFile.write (' n') # سطر جديد # تعيين مساحة عمل إعدادات البيئة = r'L:  Simulation  Output  PoolVariables.gdb '# تعيين المتغيرات المحلية outWorkspace = r 'L:  Simulation  Output  CreateCSV' feature_classes = [] لمسار المسار ، أسماء المسارات ، الملف الأسماء في arcpy.da.Walk (مساحة العمل ، نوع البيانات = "FeatureClass" ، اكتب = "Point"): لاسم الملف في أسماء الملفات: feature_classes.append (os.path.join (dirpath ، اسم الملف)) # حلقة من خلال قائمة feature_classes حاول: بالنسبة إلى fc في feature_classes: الاسم = os.path.join (outWorkspace، os.path.basename (fc) + ".csv") WriteCsv (fc، name) باستثناء: print arcpy.GetMessages ()

بعض المؤشرات:

  • استخدام'.'. انضم (خريطة (شارع ، صف))يأتي من منشور تجاوز مكدس (بفضل Mark Biek) ، فإن ملفخريطةمهم إذا كان الصف يحتوي على أي الأرقام (مثل FID) لجعل القائمة بأكملها قائمة من السلاسل.
  • يتم دعم استخدام ' n' لفاصل الأسطر بواسطة منشور تجاوز سعة المكدس هذا (بفضل sorin) ، على ما يبدو ليست هناك حاجة إلى os.linesep حيث أن python سيتفهم ما تحاول القيام به وإدخال الحرف الصحيح على أي حال ... لا أستخدم Mac أو Linux لذا لا يمكنني التأكيد.

أنا أستخدم شيئًا كهذا بنجاح كبير.

استيراد arcpy، os، csv inTables = r "pathToWorkspace" لـ dirpath، dirnames، filenames in arcpy.da.Walk (inTables، datatype = "Table"، type = "ALL"): for tableName في أسماء الملفات: طباعة "إلحاق الجداول من "+ tableName +" to "+ newTable arcpy.Append_management (os.path.join (dirpath، tableName)، newTable،" NO_TEST ") CSVFile = r" pathToOutputCSV.csv "الحقول = arcpy.ListFields (newTable) fieldNames = [field .name للحقل في الحقول] مفتوح (CSVFile، 'w') مثل f: dw = csv.DictWriter (f، fieldNames) dw.writeheader () مع arcpy.da.SearchCursor (newTable، fieldNames) كمؤشر: للصف في المؤشر: dw.writerow (dt (zip (fieldNames، Utf8EncodeArray (row)))) اطبع "محول" + masterTable + "إلى ملف CSV!" صف ديل ، المؤشر

شاهد الفيديو: GeodatabaseBasicsPart1