span8
span4
本文是由5部分组成的系列文章的第2部分,帮助您开始学习基本的Python和FME。这篇文章是关于使用启动Python脚本内工作台和功能包括两个例子。第一种使用启动Python脚本运行的翻译和第二写入自定义(用户定义)消息日志文件之前将文件复制。
在工作空间中添加Python启动脚本是扩展Workbench功能的好方法。您可能希望在运行翻译之前以某种方式设置环境,或者您可能希望增加自定义脚本对FME的控制。您可以直接在Workbench中定义脚本。在工作台导航窗格下面工作场所参数>脚本,您将看到一个名为的参数启动Python脚本。在参数右键单击并选择编辑参数值打开一个特殊的Python编辑窗口。在这里,你可以输入一些Python代码,将执行之前翻译,但后脚本化参数的执行。
用户可以输入Python代码将在工作区下的参数>脚本>启动 - Python脚本导航窗格中的启动 - Python脚本参数翻译之前执行。
注:如果您要设置或返回FME参数,这是不是地方 - 看脚本参数文章。
附工作区:StartupPython1.fmwt
您可能需要之前或运行一个翻译后创建数据的备份。这是可能同时具有启动Python脚本或关机Python脚本这样做。在这个例子中,您将创建shape文件输入数据集的zip文件备份。您可以使用附加的工作空间模板,StartupPython1.fmwt(参见上面的下载小节获取链接)。
打开附加的工作空间。工作区读取输入shape文件数据集和数据写入到GML之前的重新投影数据。在我们运行工作空间,我们要建立从源头数据集zip文件,并将其放置在在C Temp文件夹:驱动器,如果不存在的话。如果具有相同名称的压缩文件已经存在,该文件将不会被复制和消息将被打印到日志窗口。前往导航>工作场所参数>脚本>启动 - Python脚本查看脚本或参阅以下内容。
#进口FME和shutil模块导入FME,从OS导入路径#文件路径shutil硬编码到C:\ TEMP workspacePath = 'C:\\ TEMP' 使用macroValues字典的SourceFile = fme.macroValues [ 'SourceDataset_ESRISHAPE']#源数据集的#文件路径获取数据集名称,而不扩展与 '_backup' 所附SOURCENAME = path.splitext(path.basename(的资源文件))[0] + '_backup' 与名称zipDir新拉链的#路径= '{} \\ {}'。格式(包含源数据集SOURCEPATH = path.dirname(的资源文件)#如果具有相同名称的压缩文件已经存在的文件夹的workspacePath,SOURCENAME)#根目录下,不要创建,添加消息登录窗口,如果path.exists(zipDir +“.ZIP”):#邮件登录窗口打印(zipDir +”名为.zip已经存在并没有创造拉链。‘)其他:#使用shutil模块来创建压缩文件shutil.make_archive(zipDir,‘拉链’,SOURCEPATH)打印(’创建备份 '印刷+ path.basename(的资源文件))(' 在 '+ zipDir +' .ZIP“)##调试打印路径(SOURCENAME)#打印(zipDir)
该脚本进口FME,shutil模块和路径类从os模块。该shutil.make_archive ()(第23行),需要至少3个参数:
我们可以使用Python函数和FME宏来查找所有的第一个和第三个参数。在本例中,我们希望在C:\TEMP文件夹中创建源数据集的zip文件,其名称与shapefile和文本“_backup”相同。
为了找到shape文件的名称,我们可以使用fme.macroValues []字典查找使用源数据集参数(中的资源文件脚本)源数据集的文件路径,并获得唯一的文件路径的最后一部分。
在这个例子中,它是“SourceDataset_ESRISHAPE”。您的源数据集参数可能有另一个名称,您可以通过在Navigator窗格中右键单击source reader并进行选择来找到该名称编辑用户参数定义在这里你可以看到名称参数。
通常可以通过在Navigator窗格中右键单击reader并选择Edit User parameter Definition来找到源数据集参数的名称。
为了让数据集名称不带扩展名(脚本SOURCENAME),我们可以使用path.basename ()从功能操作系统模块要查找的文件名。该path.splitext()功能将分裂在第一个文本“”和我们在文件名,而不是扩展只关心,我们只用[0]返回第一段文字。我们追加“_backup”在文件名末尾。
我们通过获取目标文件夹(硬编码为workspacePath)、添加“\\”、文件名(sourceName)和添加“_backup”来完成完整zip路径的创建。注意,因为反斜杠字符在Python中是转义字符,所以我们需要在文件路径中使用双反斜杠。
接下来,我们需要找到包含要压缩的数据的文件夹,因为shapefile是基于文件夹的格式,所以不能简单地复制.shp文件。由于我们已经找到了源数据集文件的文件路径,所以可以使用path.dirname()函数来获得包含数据(SOURCEPATH脚本)的文件夹的文件路径。
为了防止具有相同名称覆盖现有数据集,源数据集的zip文件备份只创建如果不存在的话。如果是这样,只有一个消息将打印到日志中。这通过控制如果/其他声明。最后三行的打印功能进行调试。
如果备份位置中已经存在同名文件,则在翻译日志窗格中打印的消息。在这种情况下,将不会创建zip文件。
运行工作区(运行>运行工作区或按F5)。工作区运行完毕后,进入C:\ TEMP文件夹。您应该看到在末尾“_backup”你的输入数据集名称的压缩文件。
注意:您没有写入到C:\ TEMP。您可以将脚本改为写入到另一个硬编码的文件路径,而不是或使用已发布的参数要求用户选择他们想要的zip文件被写入到每次运行工作区的时间。
附加工作区:StartupPython2.fmw
日志文件中包含了大量的信息了,不过如果你想要编写自定义消息日志文件?您可以通过启动Python脚本,PythonCaller变压器,并关闭Python脚本添加自定义消息到日志文件。在这个例子中,你将被添加的短消息与一个启动Python脚本日志文件。
我们可以用下面的启动Python脚本运行FME之前编写自定义的消息日志文件(请参阅StartupPython2.fmw):
#导入FME对象模块进口fmeobjects#创建FME日志记录称为记录= fmeobjects.FMELogFile()#呼叫logMessageString方法来添加自定义文本logger.logMessageString(“您可以添加自定义消息到日志文件”)文件对象名称#演示打印声明将只打印到日志窗格打印(“这将只打印到翻译日志窗格”)
与FME对象模块,所以我们需要您可以访问日志文件进口fmeobjects。然后通过调用创建了一个名为“记录”的日志文件对象fmeobjects.FMELogFile()类。然后,对象调用logMessageString()方法将自定义文本添加到日志文件。打印功能是演示消息打印到的转换日志窗格将不会出现在转换日志文件中。
打开附加的工作空间。它看起来非常相似的第一个例子。运行工作区(运行>运行工作区或按F5)。转至窗格内的转换日志窗格,单击鼠标右键。从菜单中选择并键入“日志”“查找”。你应该看到中突出显示文本“日志”的情况下,转换日志窗格。您将看到自定义日志消息,并在窗格中突出显示的打印信息。
第一突出显示的行与该记录器对象的logMessageString方法创建的。第二突出显示的行是使用打印功能创建的。
去那里的附加工作区保存的文件夹位置。日志文件应该(默认)保存在同一文件夹位置,并应具有相同的名称作为工作区,但扩展名为.log。打开任何文本编辑器的日志文件。使用搜索功能查找日志中的自定义消息。请注意,打印信息不保存在翻译的日志文件。
注意使用打印功能不会出现在日志文件中添加的文本。使用记录器对象的logMessageString方法会出现在日志文件中只有文字添加。
注意:将自定义消息写入日志文件的方法取决于它是在启动还是关闭阶段。在启动脚本中(因为FME已经打开了日志文件,而且多次打开它是危险的),您应该使用fmeobjects.FMELogFile()。
要为Workbench中启动和关机脚本访问帮助文档,请访问:启动和关闭Python脚本
有关可用FME变量的完整列表启动Python脚本请访问:FME_BEGIN_PYTHON
你可以找到的Python FME的完整文档对象这里API:FME对象的Python API
这里使用源自从公开数据中的数据由提供温哥华市, 不列颠哥伦比亚省。它包含了开放政府许可协议进行许可信息 - 温哥华。
©2020安全亚搏在线软件公司|法律