span8
span4
本文是5零件系列的第2部分,以帮助您开始使用基本Python和FME。本文是关于使用的启动python脚本WorkBench中的功能,包括两个示例。第一个使用启动Python脚本在运行翻译之前复制文件,并将其次将自定义(用户定义)消息写入日志文件。
将Python Startup脚本添加到工作区中是扩展Workbench功能的好方法。您可能希望在运行翻译之前以某种方式设置环境,或者您可能希望增加自定义脚本提供的FME对FME的控制。您可以在WorkBench中直接定义脚本。在Workbench Navigator窗格下工作区参数>脚本,您将看到一个名为的参数启动python脚本。右键单击参数并选择编辑参数值打开特殊的Python编辑窗口。在这里,您可以输入将执行的一些Python代码之前翻译但是后执行脚本参数。
用户可以在工作区参数>脚本>启动Python脚本下的导航窗格中的启动Python脚本参数中输入Python代码,这些代码将在转换之前执行。
注意:如果要设置或返回FME参数,则不显示脚本参数文章。
附加工作区:StartupPython1.fmwt
您可能希望在运行转换之前或之后创建数据备份。这可以通过启动Python脚本或关闭Python脚本来实现。在本例中,您将为shapefile输入数据集创建一个zip文件备份。您可以使用附加的工作区模板,startuppython1.fmwt.(请参阅下载上面的链接)。
打开附加的工作区。工作区读取输入的shapefile数据集,并在将数据写入GML之前重新投影数据。在运行工作空间之前,我们希望从源数据集创建一个zip文件,并将其放在C:驱动器上的一个临时文件夹中(如果该文件不存在的话)。如果已经存在同名的zip文件,则不会复制该文件,并将在日志窗口中打印一条消息。去导航器>工作空间参数>脚本>启动Python脚本要查看脚本或查看以下内容。
#导入fme和suppil模块导入fme,shutil从操作系统导入路径#filepath硬编码到c:\ temp workspacepath ='c:\\ temp'#filepath使用macRovalue difticont sourcefile = fme.macravers ['sourceatataset_esrishape']#获取DataSet名称,无扩展名为“_backup”已附加的sourceName = path.splitext(path.baseName(sourcefile))[0] +'_backup'#new zip的#path的name zipdir ='{} \\ {}'。格式(WorkspacePath,Sourcename)文件夹的root目录包含源DataSet源路径= path.dirname(sourcefile)#如果zip文件已存在,请不要创建,如果path.exist(zipdir +'.zip'(zipdir +'.zip')):##消息到日志窗口打印(zipdir +'.zip已存在。没有创建zip。')else:#使用shutil模块创建zip文件shutilmake_archive(zipdir,'zip',sourcepath)打印('创建)'+ path.baseName(sourcefile))打印('在'+ zipdir +'.zip'的路径')#debugging#print(sourcename)#print(zipdir)
脚本导入fme,截盘模块和路径来自OS模块的类。的shutilmake_archive()(第23行)至少需要3个参数:
我们可以使用Python函数和FME宏查找所有第一个和第三个参数。在此示例中,我们希望在C:\ temp文件夹中创建源数据集的zip文件,其名称与shapefile和文本“_backup”。
要查找shapefile名称,可以使用fme.macroValues []字典使用源DataSet参数找到源数据集的文件路径(脚本中的Sourcefile),只获取文件路径的最后一部分。
在这个例子中,它是'sourceataSet_esrishape.'。您的源DataSet参数可以具有另一个名称,您可以通过右键单击导航器窗格中的源读取器并选择编辑用户参数定义在其中可以看到Name参数。
通常可以通过右键单击导航器窗格中的读取器并选择“编辑用户参数定义”来找到源数据集参数的名称。
要获取没有扩展名的数据集名称(脚本中的Sourcename),我们可以使用path.baseName()函数的OS.模块来查找文件名。的path.splitext ()函数将分割文本在第一个'。因为我们只对文件名感兴趣,而不是扩展名,所以我们只返回第一个带有[0]的文本。我们在文件名的末尾添加' _backup '。
通过使用目标文件夹(硬编码为WorkspacePath)来完成创建完整的Zip路径,添加“\\”,文件名(Sourcename)并添加“_Backup”。请注意,由于反斜杠字符是Python中的转义字符,因此我们需要在文件路径中使用双反斜杠。
接下来,我们需要查找包含数据的文件夹,因为Shapefile是基于文件夹的格式,因此您无法简单地仅复制.shp文件。我们已经找到了源数据集文件的文件路径,我们可以使用path.dirname ()函数获取包含数据的文件夹的文件路径(脚本中的源路径)。
为防止使用相同名称覆盖现有数据集,源数据集的zip文件备份仅在尚不存在的情况下创建。如果它,只有消息将打印到日志中。这由它控制如果别的声明。最后三行是打印功能,用于调试目的。
如果备份位置中已存在具有相同名称的文件,则在转换日志窗格中打印的消息。在这种情况下,不会创建zip文件。
运行工作区(运行>运行工作区或按F5)。在工作区完成运行后,转到C:\TEMP文件夹。您应该会看到一个带有输入数据集名称的zip文件,末尾带有' _backup '。
注意:您不必写到C:\TEMP。您可以将脚本改为写入另一个硬编码的文件路径,或者使用已发布的参数要求用户选择每次运行工作区时希望将zip文件写入的位置。
附加的工作区:startuppython2.fmw
日志文件已包含很多信息,但如果要将自定义消息写入日志文件您可以使用启动Python脚本,PythonCaller变压器,以及关闭Python脚本添加自定义消息。在此示例中,您将使用Startup Python脚本添加到日志文件的短消息。
我们可以在使用以下启动Python脚本运行FME之前将自定义消息写入日志文件(请参阅startuppython2.fmw):
#导入fme对象模块导入fmeobjects#创建fme日志文件对象名称名为logger logger = fmeobjects.fmelogfile()#调用logmessageString方法添加自定义文本logger.logmessageString(“您可以将自定义消息添加到日志文件”)#演示打印语句只会打印到日志窗格打印('这只会打印到翻译日志窗格')
您可以使用FME Objects模块访问日志文件,因此我们需要这样做进口fmeobjects。然后通过调用创建名为“记录器”的日志文件对象fmeobjects.fmelogfile()班级。然后呼叫对象logMessageString ()将自定义文本添加到日志文件中的方法。打印功能是演示打印到的消息翻译日志窗格不会出现在翻译日志文件中。
打开附加的工作区。它应该与第一个示例非常相似。运行工作区(运行>运行工作区或按F5)。转到翻译日志窗格并右键单击窗格中。从菜单中选择“查找”并输入“日志”。您应该看到在内部突出显示的文本“日志”的实例翻译日志窗格。您将看到自定义日志消息和打印消息在窗格中突出显示。
使用Logger对象的LogMessageStRing方法创建第一个突出显示的行。使用打印功能创建第二个突出显示的线。
转到附加工作区保存的文件夹位置。日志文件应该保存在相同的文件夹位置(默认情况下),并且应该具有与工作空间相同的名称,但是扩展名为.log。用任何文本编辑器打开日志文件。使用搜索函数在日志中查找自定义消息。注意,打印消息没有保存在翻译日志文件中。
请注意使用打印函数添加的文本不会出现在日志文件中。只有使用Logger对象的logMessageString方法添加的文本将显示在日志文件中。
注意:将自定义消息写入日志文件的方法因其在启动或关机阶段期间而异。在启动脚本中(因为FME已经有日志文件打开,并且危险地打开它不止一次),您应该使用fmeobjects.fmelogfile()。
要访问工作台内启动和关闭脚本的帮助文档,请转到:启动和关闭Python脚本
有关启动Python脚本可用的FME变量的完整列表,请转至:FME_BEGIN_PYTHON
您可以在此处找到Python FME对象API的完整文档:FME对象Python API
这里使用的数据源自可提供的开放数据温哥华市不列颠哥伦比亚省。它包含在开放政府许可证下的信息-温哥华。
©2019安全亚搏在线软件公司法律