斯潘8
斯潘4
本文是由5部分组成的系列文章的第2部分,旨在帮助您开始基本的Python和FME。本文是关于使用启动python脚本工作台中的功能,包括两个示例。第一个脚本使用启动python脚本在运行转换之前复制文件,第二个脚本将自定义(用户定义)消息写入日志文件。
向工作区添加一个python启动脚本是扩展Workbench功能的好方法。您可能希望在运行翻译之前以某种方式设置环境,或者您可能希望增强对自定义脚本提供的FME的控制。您可以直接在工作台内定义脚本。在工作台导航器窗格中工作区参数>脚本,您将看到一个名为启动python脚本.右键单击参数并选择编辑参数值打开一个特殊的python编辑窗口。在这里,您可以输入一些将要执行的python代码之前翻译,但是之后脚本化参数的执行。
用户可以在导航窗格的“工作区参数>脚本>启动python脚本”下的“启动python脚本”参数中输入要在转换之前执行的python代码。
注:如果您想设置或返回一个FME参数,这不是地方-见脚本化参数文章。
附加工作区:startuppython1.fmwt
您可能希望在运行转换之前或之后创建数据备份。可以同时使用启动python脚本或关闭python脚本来执行此操作。在这个例子中,您将创建shapefile输入数据集的zip文件备份。您可以使用附加的工作区模板,启动电源1.fmwt(有关链接,请参阅上面的下载部分)。
打开附加的工作区。在将数据写入GML之前,工作区读取输入shapefile数据集并重新投影数据。在运行工作区之前,我们希望从源数据集中创建一个zip文件,并将其放在c:drive上的temp文件夹中(如果它不存在的话)。如果已经存在同名的zip文件,文件将不会被复制,并将一条消息打印到日志窗口。去导航器>工作区参数>脚本>启动python脚本查看脚本或查看以下内容。
#导入FME和关闭模块导入FME,ShutilFrom OS导入路径文件路径硬编码到C:\TempWorkspacePath='C:\\Temp'使用宏值字典的源数据集的文件路径sourceFile=fme.macrovalues['source dataset _esrishape']获取不带扩展名的数据集名称,并附加“_backup”source name=path.splitext(path.basename(sourcefile))[0]+'_backup'带有nam的新zip路径ezipdir='\'。格式(workspacepath,source name)包含源数据集的文件夹根目录source path=path.dirname(source file)如果已经存在同名的zip文件,不要创造,如果path.exists(zipdir+'.zip'):message to log window print(zipdir+'.zip已存在,请将消息添加到日志窗口。没有创建zip。')其他:使用shutil模块创建zip文件shutil.make_archive(zipdir,“拉链”,sourcepath)print('created backup of'+path.basename(sourcefile))print('path at'+zipdir+'.zip')调试打印(sourcename)打印(zipdir)
脚本导入FME,舒蒂尔模块和路径从操作系统模块初始化。这个shutil.make_archive()。(第23行)至少需要3个参数:
我们可以使用python函数和fme宏来查找所有的第一个和第三个参数。在这个例子中,我们要在c:\temp文件夹中创建源数据集的zip文件,该文件与shapefile和文本“_backup”同名。
要查找形状文件名,我们可以使用宏观价值观字典,使用source dataset参数(脚本中的source file)查找源数据集的文件路径,并仅获取文件路径的最后一部分。
在这个例子中,它是源数据集'.源数据集参数可能有另一个名称,您可以通过右键单击“导航器”窗格中的源读卡器并选择编辑用户参数定义在这里可以看到name参数。
源数据集参数的名称通常可以通过在导航器窗格中右键单击读卡器并选择编辑用户参数定义来找到。
要获取不带扩展名的数据集名称(脚本中的sourcename),我们可以使用BaseNeMe()函数来自操作系统用于查找文件名的模块。这个SpultExter()函数将在第一个“.”处拆分文本,因为我们只关心文件名而不关心扩展名,我们只返回第一段带有[0]的文本。我们在文件名的末尾附加了“备份”。
我们通过选择目标文件夹(硬编码为工作空间路径)来完成创建完整的zip路径。添加“\\”文件名(sourcename)并添加“_backup”。注意,因为反斜杠字符是Python中的转义字符,我们需要在文件路径中使用双反斜杠。
下一步,我们需要找到包含要压缩的数据的文件夹,因为shapefile是基于文件夹的格式,所以您不能只复制.shp文件。因为我们已经找到了源数据集文件的文件路径,我们可以使用DrimeNe()函数获取包含数据的文件夹的文件路径(脚本中的sourcepath)。
为了防止覆盖同名的现有数据集,只有当源数据集不存在时,才会创建该数据集的zip文件备份。如果确实如此,只有一条消息将打印到日志中。这是由一个如果/其他语句。最后三行是用于调试的打印函数。
如果备份位置中已存在同名文件,则在转换日志窗格中打印的消息。在这种情况下,将不会创建zip文件。
运行工作区(运行>运行工作区或按F5)。工作区运行完成后,转到c:\temp文件夹。您应该看到一个zip文件,其输入数据集名称的结尾是“_backup”。
注意:您不必给c:\temp写信。您可以将脚本更改为写入另一个硬编码文件路径,或者使用已发布的参数要求用户选择每次运行工作区时希望将zip文件写入的位置。
附加工作区:startuppython2.fmw
日志文件已经包含了很多信息,但是如果您想将自定义消息写入日志文件呢?您可以使用启动python脚本向日志文件添加自定义消息,皮通卡勒变压器,还有一个关闭python脚本。在这个例子中,您将使用启动python脚本向日志文件添加一条短消息。
在使用以下启动python脚本运行fme之前,我们可以将自定义消息写入日志文件(请参见启动电源2.fmw):
#import fme objects moduleimport fmeobjects创建名为loggerlogger=fmeobjects.fme log file()调用logmessagestring方法添加自定义的textlogger.logmessagestring(“您可以将自定义消息添加到日志文件”)演示打印语句将只打印到日志paneprint(“这将只打印到转换loG“窗格”
您可以使用FME对象模块访问日志文件,因此我们需要导入FmeObjects.然后通过调用fmeobjects.fmelogfile()。班级。然后对象调用日志消息字符串()方法将自定义文本添加到日志文件中。打印功能是演示将消息打印到翻译日志窗格不会出现在翻译日志文件中。
打开附加的工作区。它看起来应该与第一个示例非常相似。运行工作区(运行>运行工作区或按F5)。转到“翻译日志”窗格,在该窗格中单击鼠标右键。从菜单中选择“find”,然后键入“log”。您应该看到文本“日志”的实例在翻译日志窗格。您将在窗格中看到自定义日志消息和突出显示的打印消息。
第一条突出显示的行是使用logger对象的logMessageString方法创建的。第二条突出显示的行是使用打印功能创建的。
转到保存附加工作区的文件夹位置。日志文件应保存在同一文件夹位置(默认情况下),并且应与工作区同名,但扩展名为.log。用任何文本编辑器打开日志文件。使用搜索功能在日志中查找自定义消息。请注意,打印消息没有保存在翻译日志文件中。
注意,使用print函数添加的文本不会出现在日志文件中。只有使用logger对象的logMessageString方法添加的文本才会出现在日志文件中。
注意:将自定义消息写入日志文件的方法取决于它是在启动还是关闭阶段。在启动脚本中(因为FME已经打开了日志文件,多次打开是很危险的,你应该使用fmeobjects.fmelogfile()。.
要在Workbench中访问启动和关闭脚本的帮助文档,请到:启动和关闭python脚本
有关可用于启动python脚本的FME变量的完整列表,请转到:开始使用python
您可以在这里找到python FME对象API的完整文档:fme对象python api
此处使用的数据源于温哥华市,不列颠哥伦比亚省。它包含根据开放政府许可证(温哥华)获得许可的信息。
?2019安全亚搏在线软件公司|合法的