FME पायथन एक्सटेंशन का उपयोग कौन करता है और कैसे करता है?


जवाबों:


9

मैं अभी 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')

यह बहुत बुनियादी है, लेकिन वास्तव में कोई सीमा नहीं है जो मुझे नहीं लगता है। वहाँ विचारों के टन कर रहे हैं यहाँ के रूप में अच्छी तरह से।

संपादित करें: कोड में जोड़े गए सुविधाओं की संख्या पाने के लिए और उन लोगों को सीएसवी लॉग फ़ाइल पर धकेल दें।


5

ओलिवर के पायथन कॉर्नर पर एक नजर एफएमई में पायथन का उपयोग करके आप एक टन चीजें कर सकते हैं।

मैं अक्सर 10 अलग-अलग ट्रांसफार्मर (यदि एलीफ एलिफ .. और) का उपयोग करने के बजाय 1 ट्रांसफॉर्मर के अंदर कुछ एंटिमेन्यूएलेशन बनाने के लिए पायथनकैलर का उपयोग करता हूं।

इस उदाहरण की तरह आपके पास बहुत ही बुनियादी PythonCallers हो सकते हैं जो आपके सभी गुणों को अपरकेस मानों में बदल देंगे:

def upperAll(feature):
    for att in feature.getAttributeList():
        feature.setAttribute(att,feature.gettAttribute(att).upper())

मैं विफलता के मामले में ईमेल भेजने के लिए या FTP सर्वर आदि के साथ बातचीत करने के लिए भी PythonCaller का उपयोग करता हूं। वास्तव में कोई सीमा नहीं है

मज़ा और खुश FMEing है

जेफ


Oooohhhhh ... मुझे इस की आवाज़ पसंद है ... कभी भी इस तरह से PythonCaller का उपयोग करने के बारे में नहीं सोचा था!
चाड कूपर

इस पर एक अतिरिक्त सवाल ... ईमेल को काम करने के लिए आपको पोर्ट 25 (फ़ायरवॉल) तक पहुँच देने के लिए क्या कार्यक्रम देना है? मैंने कुछ हफ़्ते तक इससे संघर्ष किया और फिर आखिरकार हार मान ली।
ब्लॉर्ड-कास्टिलो

4

ऊपर अच्छा उदाहरण: मैं वर्तमान में एफएमपीडिया नामक हमारे नॉलेजबेस के लिए एक लेख लिख रहा हूं: पायथन और एफएमई मूल बातें

इसमें कुछ सरल उदाहरण शामिल हैं जैसे स्टार्ट अप स्क्रिप्ट के साथ कार्यक्षेत्र चलाने से पहले किसी फ़ाइल को हटाना, पायथनक्लर के साथ सुविधाओं में हेरफेर करना आदि। अधिक जटिल उदाहरणों के लिंक भी हैं।

केन ब्रैग सेफ सॉफ्टवेयर


3

उदाहरण:

कस्टम लॉग

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() 

1

मैं हाल ही में एक 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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.