Saya melihat antarmuka yang bagus untuk FME dengan Python
Apa yang kalian lakukan dengan itu? Saya ingin ide.
Saya melihat antarmuka yang bagus untuk FME dengan Python
Apa yang kalian lakukan dengan itu? Saya ingin ide.
Jawaban:
Saya baru memulai dengan FME, dan saya menggunakan skrip shutdown untuk menyalin target FGDB saya ke lokasi lain dan untuk menyimpan file log:
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')
Itu cukup mendasar, tetapi saya pikir tidak ada batasan. Ada banyak ide di sini juga.
EDIT: Menambahkan kode untuk mendapatkan sejumlah fitur yang ditulis dan mendorongnya ke file log CSV.
Lihatlah Oliver's Python Corner. Ada banyak hal yang dapat Anda lakukan menggunakan Python di FME.
Saya sering menggunakan PythonCaller untuk membuat beberapa pengaturan atribut di dalam 1 transformator daripada menggunakan 10 transformer berbeda (jika elif elif yang lain ..)
Anda dapat memiliki PythonCallers yang sangat mendasar seperti contoh ini yang akan mengubah semua atribut Anda menjadi nilai huruf besar:
def upperAll(feature):
for att in feature.getAttributeList():
feature.setAttribute(att,feature.gettAttribute(att).upper())
Saya juga menggunakan PythonCaller untuk mengirim email jika terjadi kegagalan atau berinteraksi dengan FTP Server dll. Sebenarnya tidak ada batasan
Bersenang-senang dan senang FMEing
Jeff
Contoh yang baik di atas: Saat ini saya sedang menulis artikel untuk basis pengetahuan kami bernama FMEPedia di sini: Dasar-Dasar Python dan FME .
Ini termasuk beberapa contoh sederhana seperti menghapus file sebelum menjalankan ruang kerja dengan skrip start up, memanipulasi fitur dengan PythonCaller dll. Ada juga tautan ke contoh yang lebih kompleks.
Perangkat Lunak Aman Ken Bragg
Contoh:
Log Khusus
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")
Dan Kirim Email :
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()
Saya baru-baru ini menggunakan transformator PythonCaller yang mendapatkan koordinat dari file CSV dan menyimpannya sebagai atribut. CSV akan ditulis dari ruang kerja lain yang menggunakan BoundsExtractor Transformer yang mendapatkan koordinat terikat dari kotak pembatas bidang yang saya minati.
Saya kemudian meneruskan atribut ini ke WorkspaceRunners lain yang menggunakan koordinat terikat sebagai jendela pencarian untuk diproses lebih lanjut. Saya memiliki data State-Wide dan untuk memproses seluruh negara akan memakan waktu beberapa jam. Karena saya membatasi pemrosesan saya ke jendela tertentu, semuanya membutuhkan satu menit.
Kode pythonCaller ada di sini:
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
Saya juga menggunakan skrip start up python yang menyalin pohon folder ke lokasi lain jika belum ada.
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