आप गणना मूल्य (डेटा प्रबंधन) उपकरण और कुछ पायथन जादू का उपयोग करके ऐसा कर सकते हैं । यह संबंधित प्रश्न भी देखें: आर्किस मॉडल बिल्डर के लिए मनमाना कोड जोड़ें?
एक बहु-चर चर मानों का अर्धविराम-सीमांकित स्ट्रिंग है, इसलिए multivaluesToCsv
नीचे दिया गया कार्य बहु-चर चर को सूचियों में विभाजित करता है और उन्हें पंक्तियों में परिवर्तित करता है जो तब CSV (अल्पविराम से अलग मान) पाठ फ़ाइल में लिखे जाते हैं।
मॉडल पुनरावृत्तियाँ प्रति बार एक बार मॉडल में सभी प्रक्रियाओं को चलाते हैं - यह हमारे गणना मूल्य उपकरण के लिए अवांछनीय है, जिसे हम केवल एक बार अंत में चलाना चाहते हैं। जिस तरह से आप इसे पूरा करते हैं, वह मूल, आंतरिक मॉडल को लपेटने के लिए एक और बाहरी मॉडल बनाकर होता है। यह एक मॉडल के भीतर एक मॉडल को एकीकृत करने में सहायता विषय पर चर्चा की गई है ।
तो यहां आपको यह काम करने के लिए क्या करने की आवश्यकता है:
इनर मॉडल - Iterates फ़ीचर क्लासेस, उन्हें प्रोसेस करता है, मान एकत्र करता है:
- आपके मूल मॉडल में, जो हमारा "इनर" मॉडल होगा,
Name
वैरिएबल के वैल्यूज़ को इकट्ठा करने के लिए एक और कलेक्ट वैल्यूज़ टूल जोड़ें, ताकि हम उनके समान फ़ीचर क्लास के नामों के साथ दूरी सांख्यिकीय मानों को मैप कर सकें।
- इनपुट और आउटपुट चर को मॉडल मापदंडों के रूप में उजागर करें (एक अंडाकार पर क्लिक करें और मॉडल पैरामीटर की जांच करें)। कलेक्ट वैल्यू टूल के प्रत्येक आउटपुट के साथ-साथ इनपुट कार्यक्षेत्र जैसे आपको जो भी इनपुट पैरामीटर की आवश्यकता होती है, उसके लिए यह करें।
- आंतरिक मॉडल को सहेजें और बंद करें।
बाहरी मॉडल - भीतर का मॉडल चलाता है, आंतरिक मॉडल के पूरा होने पर सिर्फ एक बार वैल्यू टूल की गणना करता है:
- एक नया मॉडल बनाएं - यह हमारा "बाहरी" मॉडल होगा।
- प्रकार का एक चर जोड़ें
Folder
आप निर्दिष्ट करने के लिए अनुमति देने के लिए जहां उत्पादन CSV फ़ाइल बनाने के।
- आउटपुट CSV फ़ाइल का नाम
String
निर्दिष्ट करने के लिए आपको एक प्रकार का चर जोड़ें ।
- नए मॉडल में इनर मॉडल जोड़ें (ArcToolbox से खींचें और ड्रॉप करें या राइट-क्लिक करें और डेटा या टूल जोड़ें, इनर मॉडल पर ब्राउज़ करें और Add पर क्लिक करें)
- आंतरिक मॉडल के किसी भी पैरामीटर के लिए वैरिएबल बनाएं जिसे आप बाहरी मॉडल से सेट करने में सक्षम होना चाहते हैं, जैसे कि इनपुट कार्यक्षेत्र (आंतरिक मॉडल पर राइट-क्लिक करें और मेक-वेरिबल-फ्रॉम पैरामीटर चुनें)।
- नए मॉडल में कैलकुलेट वैल्यू टूल जोड़ें
परिकलित मान टूल के उपयुक्त बक्से में निम्नलिखित चिपकाएँ:
अभिव्यक्ति :
multivaluesToCsv(r"%Output CSV File Location%", "%Output CSV File Name%", "%Feature Class Names%", "%Minimum Distance Values%", "%Average Distance Values%", "%Maximum Distance Values%")
- यह फ़ंक्शन में मॉडल चर को पारित करने के लिए इन-लाइन चर प्रतिस्थापन का उपयोग करता है । अपने मॉडल चर नामों से मिलान करने के लिए समायोजित करें।
r
पहले "%Output CSV File Location%"
महत्वपूर्ण है: यह इंगित करता है कि यह एक है कच्चे स्ट्रिंग ; क्योंकि विंडोज फाइल सिस्टम पथ में आमतौर पर बैकस्लैश ( पायथन में एक एस्केप कैरेक्टर ) होता है, हमें पायथन को बैकस्लैश और बाद के कैरेक्टर को विशेष चरित्र अनुक्रम के रूप में गलत तरीके से समझने से रोकने के लिए इसका उपयोग करना होगा।
- इन-लाइन वैरिएबल्स के आसपास उद्धरण देना सुनिश्चित करें क्योंकि उनके बिना पायथन को लगेगा कि वे तार के बजाय पहचानकर्ता हैं।
कोड ब्लॉक:
import os, csv
def multivaluesToCsv(csvfilepath, csvfilename, fcnames, minvalues, avgvalues, maxvalues):
ext = 'csv' # Define output file extension (e.g. csv or txt)
header = ['FC', 'MIN', 'AVG', 'MAX'] # Define header row (column names)
# Join CSV file path and name, adding extension if necessary
csvfile = os.path.join(csvfilepath, os.extsep.join((csvfilename, ext)) if not os.path.splitext(csvfilename)[1].lower().endswith(ext) else csvfilename)
# Open text file for writing
with open(csvfile, 'wb') as f:
w = csv.writer(f)
w.writerow(header) # Write header row
rows = zip(*map(lambda x: x.split(';'), [fcnames, minvalues, avgvalues, maxvalues])) # Transpose the semicolon-delimited values into rows
w.writerows(rows)
return csvfile
(वैकल्पिक) इनपुट और आउटपुट चर को मॉडल पैरामीटर के रूप में उजागर करें यदि आप उन्हें मॉडल के टूल संवाद से चलाने में सक्षम होना चाहते हैं या इसे अन्य मॉडल / स्क्रिप्ट के साथ एक साथ चेन कर सकते हैं। बाहरी मॉडल का एकमात्र आउटपुट CSV फ़ाइल है।
- (ऑप्शनल) इनपुट वैरिएबल और इनर मॉडल आउटपुट को प्रीकंडिशन के रूप में कैलकुलेटेड वैल्यू टूल से कनेक्ट करें। मुझे नहीं लगता कि इसका वास्तव में कोई प्रभाव पड़ता है, यह सिर्फ दृष्टिगत रूप से स्पष्ट करता है कि क्या चल रहा है।
मैंने ModelBuilder के साथ इसका परीक्षण किया है और इसे काम कर रहा हूं (स्क्रीनशॉट देखें)।
इनर मॉडल :
बाहरी मॉडल:
आंतरिक मॉडल अपनी सभी प्रक्रियाओं को एक बार सुविधा वर्ग के अनुसार चलाता है, और फिर गणना मूल्य उपकरण सीएसवी फ़ाइल को एक बार और केवल एक बार आउटपुट करने के लिए एक बार चलाता है।