मैंने पायथन के साथ एफएमई के लिए एक शानदार इंटरफ़ेस देखा
आप लोग इसके साथ क्या कर रहे हैं? मुझे विचार चाहिए।
मैंने पायथन के साथ एफएमई के लिए एक शानदार इंटरफ़ेस देखा
आप लोग इसके साथ क्या कर रहे हैं? मुझे विचार चाहिए।
जवाबों:
मैं अभी FME से शुरुआत कर रहा हूं, और अपने लक्ष्य FGDB को दूसरे स्थान पर कॉपी करने और लॉग फाइल को बचाने के लिए शटडाउन स्क्रिप्ट का उपयोग कर रहा हूं:
import distutils.dir_util, shutil, os, time, locale
src = 'C:/Testing/FME/TPW/Third_Party_Wells.gdb'
dst = '//share/Data Services/GIS Data/Data/Third Party Wells/Third_Party_Wells.gdb'
distutils.dir_util.copy_tree(src, dst)
logfile = FME_LogFileName
shutil.copy(logfile, 'C:/temp/PRD_' + os.path.basename(logfile)[:-4] + '_' + time.strftime('%Y_%m_%d_%H_%M_%S', time.localtime()) + '.log')
# Get features written counts
shl_count = str(FME_FeaturesWritten['ThirdPartyWellsSurface'])
bhl_count = str(FME_FeaturesWritten['ThirdPartyWellsBottom'])
lat_count = str(FME_FeaturesWritten['ThirdPartyWellsLaterals'])
# Write out features written counts to log
fm_log = open('C:/temp/PRD_Counts.log','a')
fm_log.write(time.strftime('%m/%d/%Y %I:%M:%S', time.localtime()) + ',' + shl_count + ',' + bhl_count + ',' + lat_count + ',' + str(FME_TotalFeaturesWritten) + '\n')
यह बहुत बुनियादी है, लेकिन वास्तव में कोई सीमा नहीं है जो मुझे नहीं लगता है। वहाँ विचारों के टन कर रहे हैं यहाँ के रूप में अच्छी तरह से।
संपादित करें: कोड में जोड़े गए सुविधाओं की संख्या पाने के लिए और उन लोगों को सीएसवी लॉग फ़ाइल पर धकेल दें।
ओलिवर के पायथन कॉर्नर पर एक नजर एफएमई में पायथन का उपयोग करके आप एक टन चीजें कर सकते हैं।
मैं अक्सर 10 अलग-अलग ट्रांसफार्मर (यदि एलीफ एलिफ .. और) का उपयोग करने के बजाय 1 ट्रांसफॉर्मर के अंदर कुछ एंटिमेन्यूएलेशन बनाने के लिए पायथनकैलर का उपयोग करता हूं।
इस उदाहरण की तरह आपके पास बहुत ही बुनियादी PythonCallers हो सकते हैं जो आपके सभी गुणों को अपरकेस मानों में बदल देंगे:
def upperAll(feature):
for att in feature.getAttributeList():
feature.setAttribute(att,feature.gettAttribute(att).upper())
मैं विफलता के मामले में ईमेल भेजने के लिए या FTP सर्वर आदि के साथ बातचीत करने के लिए भी PythonCaller का उपयोग करता हूं। वास्तव में कोई सीमा नहीं है
मज़ा और खुश FMEing है
जेफ
ऊपर अच्छा उदाहरण: मैं वर्तमान में एफएमपीडिया नामक हमारे नॉलेजबेस के लिए एक लेख लिख रहा हूं: पायथन और एफएमई मूल बातें ।
इसमें कुछ सरल उदाहरण शामिल हैं जैसे स्टार्ट अप स्क्रिप्ट के साथ कार्यक्षेत्र चलाने से पहले किसी फ़ाइल को हटाना, पायथनक्लर के साथ सुविधाओं में हेरफेर करना आदि। अधिक जटिल उदाहरणों के लिंक भी हैं।
केन ब्रैग सेफ सॉफ्टवेयर
उदाहरण:
कस्टम लॉग
import os.path, time, os, datetime, __main__ , sys, pyfme,shutil
from pyfme import *
class expFeature(object):
def __init__(self):
self.logger = pyfme.FMELogfile()
pass
def close(self):
try:
#folders creation
os.makedirs(param_folder)
#Log creation
logFile = param_folder + timecreated +".log"
FILE = open(logFile,"w")
log=FMELogfile(logFile)
log.log("Bla bla bla")
और ईमेल भेजें :
message = MIMEMultipart()
message["From"] = email_from
message["To"] = email_to
message['Date'] = formatdate(localtime=True)
message["Subject"] = subject
message.attach( MIMEText(html, 'html') )
attachment = MIMEBase('application', "octet-stream")
attachment.set_payload( open(FileLog,"rb").read() )
Encoders.encode_base64(attachment)
attachment.add_header('Content-Disposition', 'attachment; filename="%s"' % os.path.basename(FileLog))
message.attach(attachment)
smtp = smtplib.SMTP(smtpServer)
smtp.sendmail(email_from, email_to, message.as_string())
print "Successfully sent email"
smtp.close()
मैं हाल ही में एक PythonCaller ट्रांसफार्मर का उपयोग कर रहा हूं जो एक CSV फ़ाइल से निर्देशांक प्राप्त करता है और उन्हें विशेषताओं के रूप में बचाता है। CSV को एक अन्य कार्यक्षेत्र से लिखा जाता है जो एक BoundsExtractor ट्रांसफार्मर का उपयोग करता है जो कि मेरी रुचि के एक बाउंडिंग बॉक्स से सीमा निर्देशांक प्राप्त करता है।
फिर मैं इन विशेषताओं को अन्य कार्यक्षेत्रों में पास करता हूं जो आगे की प्रक्रिया के लिए खोज विंडो के रूप में बाउंडिंग निर्देशांक का उपयोग करते हैं। मेरे पास स्टेट-वाइड डेटा है और पूरे राज्य पर प्रक्रिया करने में कई घंटे लगेंगे। क्योंकि मैं अपने प्रसंस्करण को एक विशेष विंडो तक सीमित करता हूं, पूरी चीज में एक मिनट लगता है।
PythonCaller कोड यहाँ है:
import fmeobjects
import csv
import re
# Template Function interface:
def getBounds(feature):
outputDirectory = FME_MacroValues['Output_Directory'] # Set outputDirectory
NativeTitle = FME_MacroValues['Native_Title'] # Set NativeTitle
NativeTitle = re.sub('\W','_',NativeTitle)
NativeTitle = re.sub(' ','_',NativeTitle)
csvPath = outputDirectory + '\\' + NativeTitle + '_boundingbox.csv' # Set csvPath
# open csv file containing bounding coordinates
with open(csvPath, 'rb') as csvfile:
reader = csv.reader(csvfile, delimiter = ',')
bounds = reader.next()
# Set bounding variables
XMIN = float(bounds[0])
XMAX = float(bounds[1])
YMIN = float(bounds[2])
YMAX = float(bounds[3])
# Set attributes to variable values
feature.setAttribute("_xmin", XMIN)
feature.setAttribute("_ymin", YMIN)
feature.setAttribute("_xmax", XMAX)
feature.setAttribute("_ymax", YMAX)
pass
मैं एक स्क्रिप्ट स्टार्ट अप स्क्रिप्ट का भी उपयोग करता हूं जो एक फ़ोल्डर ट्री को किसी अन्य स्थान पर कॉपी करता है अगर यह पहले से मौजूद नहीं है।
import os
import fmeobjects
import shutil
srcDir_project = r'W:\AlignmentSheets\PostInstall\Alignment Sheet Generator\ProjectData\ProjectNameFolder'
srcDir_settings = r'W:\AlignmentSheets\PostInstall\Alignment Sheet Generator\ProjectData\Settings'
destBaseDir = FME_MacroValues['Output_Directory']
destDir_project = destBaseDir + '\\' + FME_MacroValues['A_Sheet_Project_Name'] + '\\'
destDir_settings = destBaseDir + '\\Settings\\'
if not os.path.exists(destDir_project):
shutil.copytree(srcDir_project,destDir_project)
print 'Successfully created "%s"' % destDir_project
else:
print '"%s" Already Exists. Not Creating Folder.' % destDir_project
if not os.path.exists(destDir_settings):
shutil.copytree(srcDir_settings,destDir_settings)
print 'Successfully created "%s"' % destDir_settings
else:
print '"%s" Already Exists. Not Creating Folder.' % destDir_settings