Vi una gran interfaz para FME con Python
¿Qué están haciendo con eso? Quiero ideas
Vi una gran interfaz para FME con Python
¿Qué están haciendo con eso? Quiero ideas
Respuestas:
Recién estoy comenzando con FME, y estoy usando un script de apagado para copiar mi FGDB de destino en otra ubicación y guardar el archivo de registro:
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')
Eso es bastante básico, pero realmente no hay límite, no creo. Hay toneladas de ideas aquí también.
EDITAR: agregado en el código para obtener una cantidad de características escritas y enviarlas al archivo de registro CSV.
Echa un vistazo a Oliver's Python Corner. Hay muchas cosas que puedes hacer con Python en FME.
A menudo uso PythonCaller para hacer algunas manipulaciones de atributos dentro de 1 transformador en lugar de usar 10 transformadores diferentes (si elif elif else ..)
Puede tener PythonCallers muy básicos como este ejemplo que convertirá todos sus atributos a valores en mayúsculas:
def upperAll(feature):
for att in feature.getAttributeList():
feature.setAttribute(att,feature.gettAttribute(att).upper())
También uso PythonCaller para enviar correos electrónicos en caso de falla o interactuar con un servidor FTP, etc. Realmente no hay límites
Diviértete y feliz FMEing
Jeff
Buen ejemplo anterior: actualmente estoy escribiendo un artículo para nuestra base de conocimiento llamado FMEPedia aquí: Python y FME Basics .
Esto incluye algunos ejemplos simples, como eliminar un archivo antes de ejecutar un espacio de trabajo con un script de inicio, manipular características con un PythonCaller, etc. También hay enlaces a ejemplos más complejos.
Software seguro Ken Bragg
Ejemplos:
Registro personalizado
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")
Y enviar correo electrónico :
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()
Recientemente he estado usando un transformador PythonCaller que obtiene coordenadas de un archivo CSV y las guarda como atributos. El CSV se escribe desde otro espacio de trabajo que utiliza un Transformador BoundsExtractor que obtiene las coordenadas delimitadoras de un cuadro delimitador de mi área de interés.
Luego paso estos atributos a otros WorkspaceRunners que usan las coordenadas delimitadoras como una ventana de búsqueda para su posterior procesamiento. Tengo datos de todo el estado y procesarlos en todo el estado llevaría varias horas. Debido a que limito mi procesamiento a una ventana en particular, todo toma un minuto.
El código pythonCaller está aquí:
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
También uso un script de inicio de Python que copia un árbol de carpetas a otra ubicación si aún no existe.
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