أكثر

استعلام تعريف يحتوي على 3 متغيرات زائد للتكرار باستخدام Python وحفظ ملفات الطبقة


لدي برنامج نصي يأخذ فئة معلم الإدخال ويستخدم حقلاً داخل هذه الفئة لإنشاء استعلام تعريف لكل حقل فريد. يوجد سؤال حول كيفية القيام بذلك مدرج أدناه لحفظ الطبقات لكل سمة فريدة

يعمل البرنامج النصي الخاص بي عندما يكون لدي ملف واحد.

أنا مهتم الآن باستخدام أكثر من متغير حقل واحد داخل الاستعلام. من الناحية المثالية ، أحب استخدام ثلاثة.

ستكون الحقول الخاصة بي هي COUNTRY و SPORT و MEDIA

سيكون استعلام التعريف شيئًا مثل

"البلد" = 'a_country' و "الرياضة" = 'a_sport' و "الوسائط" = 'a_Media_type'

المشكلة الآن هي أن هذا التعريف لن يعمل إلا في بعض الحالات. لن تمارس جميع البلدان رياضة معينة ، وبالتالي لن يكون لها نوع وسائط مرتبط بهذه الرياضة. وأيضًا إذا كانت الدولة بها رياضة ، فقد لا يكون لديها هذا النوع من الوسائط. لذلك أحتاج إلى طريقة ما لعدم إنشاء طبقات إذا كانت هذه العلاقات بين الحقول غير موجودة.

في الوقت الحالي ، ستنشئ الكود أدناه ملفات طبقات لجميع الأمثلة الممكنة ، والكثير منها غير موجود. انظر الكود أدناه

استيراد arcpy من arcpy import env # هذا هو المكان الذي يتم فيه ضبط البيئة ، ويتم انتقاء الملف من الموقع = r "U:  Stage_Area  GIS  Users  Team_Members  TWATER  DATA_SPORTS.gdb" arcpy.env.workspace = location # the feature class Source_File = "نظرة عامة" # الحقل المراد استخدامه User_Feild_1 = "COUNTRY" User_Feild_2 = "SPORT" User_Feild_3 = "MEDIA" ## هذا هو الجزء الذي يتم فيه إنشاء قائمة منفصلة من القيم الفريدة لكل فئة The_list_User_Feild_1 = [الصف [0] للصف في arcpy.da.SearchCursor (Source_File، User_Feild_1)] # يتم سرد جميع القيم ويجب تجريدها إلى قيم فريدة فقط ، والتي يمكن استخدامها داخل lopp Unique_list_1 = مجموعة (The_list_User_Feild_1) print Unique_list_1 The_list_User_Feild_2 = [الصف [0] للصف في arcpy.da.SearchCursor (Source_File، User_Feild_2)] # يتم سرد جميع القيم ويجب تجريدها إلى القيم الفريدة فقط ، والتي يمكن استخدامها داخل lopp Unique_list_2 = مجموعة (The_list_User_Feild_2) طباعة Unique_lis t_2 The_list_User_Feild_3 = [الصف [0] للصف في arcpy.da.SearchCursor (Source_File، User_Feild_3)] # يتم سرد جميع القيم ويجب تجريدها إلى القيم الفريدة فقط ، والتي يمكن استخدامها داخل lopp Unique_list_3 = set (The_list_User_Feild_3) print Unique_list_3 ## يقوم Where_clause ببناء استعلام التحديد داخل الحلقة الأخيرة للقيمة في Unique_list_2: لـ Second_Value في Unique_list_1: من أجل thrid_value في The_list_User_Feild_3: #This هو اسم الطبقة التي يتم إنشاؤها مؤقتًا name_of_layer) + '_' + str (القيمة) + '_' + str (thrid_value) out_layer = name_of_layer #MakeFeatureLayer متغيرات in_features = Source_File where_clause = '"' + User_Feild_1 + '"' + "=" + "" "+ Second_Value +" '"+" AND "+'" '+ User_Feild_2 +' "'+" = "+" "" + القيمة + "" "+" AND "+'" '+ User_Feild_3 +' "'+" = "+" '"+ thrid_value +" "" print'  n '، حيث_clause arcpy.env.workspace = r "U:  Stage_Area  GIS  Users  Team_Members  TWATER  DATA_SPORTS.gdb" جرب: # تنفيذ MakeFeatureLayer arcpy.MakeFeatureLayer_management (in_features، name_of_layer، where_clause) # Execute SaveToLayerFile ## هذا هو المكان الذي أحب فيه حفظ الملفات خارج arcpy.env.workspace = r "U:  Stage_Area  GIS  Users  Team_Members  TWATER  DATA_SPORTS "arcpy.SaveToLayerFile_management (name_of_layer، out_layer،" ABSOLUTE ") باستثناء: print arcpy.GetMessages ()

كنت أتساءل أن البعض لديه بعض الأساليب والأفكار للعمل مع هذه المتغيرات. لقد وجدت وظيفة مماثلة هنا.

هذا له تعريف ، ولكن يبدو أنه خاص بالأداة التي يستخدمها. كما أنني كنت أعاني من أجل فهم المفهوم

سؤال مشابه


أود أن أضيفإذابيان وأGetCount_managementقبل الخاص بكSaveToLayerFile_mangement. إذا كانت طبقة المعالم لا تحتوي على سجلات ، فيمكنك تخطي التكرار.

يمكن:

إذا كان int (arcpy.GetCount_mangement (name_of_layer) .getOutput (0)) == 0: تابع

تمكنت من إيجاد الحل. في الكود الأصلي الخاص بي ، كنت ثلاث قوائم منفصلة تم إنشاؤها من مؤشر البحث. تتكون كل قائمة من هذه القائمة من قيم فريدة داخل الحقول. لكن ما يهمني حقًا هو القيمة الفريدة لثلاثة مجالات مجتمعة

لذا بدلاً من عمل ثلاثة مؤشرات بحث منفصلة

لقد قمت بعمل واحد ولكنني استخرجت الحقول الثلاثة التي كنت مهتمًا بها. ثم قمت بإلحاق قيم المؤشر هذه بالقائمة. صنعت مجموعة فريدة لهذه القائمة.

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

fc = r "U:  Stage_Area  GIS  Users  Team_Members  TWATER  DATA_SPORTS.gdb  data" حقول = [User_Feild_1، User_Feild_2، User_Feild_3] List_of_all_values ​​= [] باستخدام arcpy.da.SearchCursor (fc ، الحقول) كمؤشر للصف في المؤشر: #print ("{0}، {1}". format (row [0]، row [1])) curse = str (row [0])، str (row [1])، str (row [2]) #print curse List_of_all_values.append (curse) del curse #print List_of_all_values ​​Uniquelist = set (List_of_all_values) # إخراج القائمة للعناصر الموجودة في Uniquelist: name_of_layer = str (العناصر [0]) + '_' + str (items [1]) + '_' + str (items [2]) out_layer = name_of_layer #MakeFeatureLayer متغيرات in_features = Source_File where_clause = '"' + User_Feild_1 + '"' + "=" + "" + (العناصر [0]) + "" "+" AND "+ '"' + User_Feild_2 + '"' +" = "+" '"+ (العناصر [1]) +" "" + "AND" +' "'+ User_Feild_3 + '"' +" = "+" "" + (العناصر [2]) + ""


شاهد الفيديو: 6 Python03Variables - المتغيرات في لغة بايثون - نادية علي قاسم (شهر اكتوبر 2021).