أكثر

قص مجلد واحد من ملفات الأشكال بمجلد آخر بنفس نهايات الاسم

قص مجلد واحد من ملفات الأشكال بمجلد آخر بنفس نهايات الاسم


لدي مجلدين بهما ملفات أشكال: r'E: SO Polygons 'و r'E: SO District'

يوجد داخل كل مجلد 215 ملفًا تم تسميتها باستخدام اصطلاحات تسمية مماثلة: poly_100 أو dist_100. أحتاج إلى قص المضلعات حسب الدوائر إذا كانت أرقامها النهائية متساوية. أنا جديد على بيثون وفي حيرة:

# مجلد لمضلعات فورونوي المقطوعة Voronoi_file = str (maindir) + "/" + "Voronoi_polygons" إن لم يكن os.path.exists (Voronio_file): os.makedirs (Voronoi_file) env.workspace = r'E:  SO  Polygons ' outputworkspace = Voronoi_file count = 0 لـ fc في arcpy.ListFeatureClasses (): end1 = str (fc [4:]) env.workspace = r'E:  SO  Districs 'لـ fc في arcpy.ListFeatureClasses (): end2 = str (fc [4:]) if end1 == end2: out_name = str ((outputworkspace) + "/" + "dis_poly" + str (count)) # اجمع اسم نقطة الإخراج ومسار arcpy.Clip_analysis (end1، end2، out_name) count = count + 1

هذا يجب أن يفعل ذلك. تستفيد من اصطلاح التسمية الخاص بك ، وتفترض وجود "dist_xxx.shp" مطابق لكل "poly_xxx.shp".

import arcpy import os def getShapefiles (aDir): # احصل على جميع الملفات في الدليل allfiles = os.listdir (aDir) # عزل فقط ملفات * .shp shpOnly = [f لـ f في allfiles if (os.path.splitext ( f) [1] == ".shp")] إرجاع shpOnly def makeDictionary (aFCList): aDict = {} لـ fc في aFCList: idNumber = fc.split ("_") [1] aDict [idNumber] = عودة fc aDict # ملفات الإدخال polysDir = r'E:  SO  Polygons 'distisionsDir = r'E:  SO  Distisions' # ملاحظة التصحيح الإملائي # عزل ملفات .shp في القوائم polys = getShapefiles (polysDir) ، مقاطعات = getShapefiles (منطقة دير) # قم بعمل قاموس لملفات المقاطعات المفهرسة بأرقامها distisionsDictionary = makeDictionary (المقاطعات) # كرر من خلال وظائف القطع لـ p في polys: pFileName = os.path.split (p) [1] # في حالة وجود خطوط سفلية في الحاوية أسماء الدلائل idNumber = pFileName.split ("_") [1] # احصل على الأرقام بعد "_". clippingFeatures = distisionsDictionary [idNumber] # ابحث عن المنطقة المطابقة. outName = os.path.splitext (p) [0] + "_clp.shp" # Append "_clp"؛ يفترض ملفات shapfiles وليس gdb fc's. arcpy.Clip_analysis (p ، clippingFeatures ، outName) # Clip.

تقوم بإنشاء قائمة داخللخط:

لـ fc في arcpy.ListFeatureClasses ():

أركبييستخدم بيئة مساحة العمل عند إرجاع القائمة التي قمت بتغييرها. لقد استخدمت أيضًا نفس المتغيرناديفي كلتا الحلقتين!

جرب هذا:

arcpy.env.workspace = r'E:  SO  Polygons 'myList = arcpy.ListFeatureClasses () لـ fc في MyList: end1 = str (fc [4:]) arcpy.env.workspace = r'E:  SO  Districs 'myList2 = arcpy.ListFeatureClasses () لـ fc2 في MyList2: # do clip

هذه هي الطريقة التي سأفعلها. لم يتم اختباره ولكن يجب أن يعمل. يتكرر الرمز عبر قائمة فئات الميزات من كلا المجلدين ويبحث عن الملفات الموجودة في كلا المجلدين التي تحتوي على نفس الأرقام بعد الشرطة السفلية:

import arcpy، os clippeeDir = r'E:  SO  Polygons 'clipperDir = r'E:  SO  Districs' outDir = r'E:  SO  Voronio_file 'arcpy.env.worksapce = clippeeDir لـ c1 في arcpy.ListFeatureClasses (): print c1 clippeeFile، clippeecCode = c1.split ('_') arcpy.env.workspace = clipperDir لـ c2 في arcpy.ListFeatureClasses (): clipperFile، clipperCode = c2.split ('_') إذا clippeecCode == clipperCode : clippee = os.path.join (clippeeDir، clippeeFile) clipper = os.path.join (clipperDir، clipperFile) outFile = os.path.join (outDir، file + code + '_ clip') arcpy.Clip_analysis (clippee، clipper، outFile)