西班牙
斯潘4
本文是由5部分组成的系列文章的第2部分,帮助您开始使用基本的Python和FME。本文是关于使用启动Python脚本工作台中的功能,包括两个示例。第一个脚本使用启动Python脚本在运行转换之前复制文件,第二个脚本将自定义(用户定义的)消息写入日志文件。
将Python启动脚本添加到工作区是扩展Workbench功能的一个好方法。在运行翻译之前,您可能希望以某种方式设置环境,或者您可能希望增强对自定义脚本提供的FME的控制。您可以直接在Workbench中定义脚本。在Workbench Navigator窗格中的工作区参数>脚本,您将看到一个名为启动Python脚本.右键单击参数并选择编辑参数值打开一个特殊的Python编辑窗口。在这里您可以输入一些将执行的Python代码之前翻译但是之后脚本化参数的执行。
用户可以在“工作区参数>脚本>启动Python脚本”下的“导航器”窗格中的“启动Python脚本”参数中输入将在转换之前执行的Python代码。
注意:如果您想设置或返回一个FME参数,这里不是这个地方-请参阅脚本化参数文章。
附加工作区:StartupPython1.fmwt
您可能希望在运行转换之前或之后创建数据备份。可以使用启动Python脚本或关闭Python脚本来执行此操作。在本例中,您将创建shapefile输入数据集的zip文件备份。您可以使用附加的工作区模板,启动python1.fmwt(有关链接,请参阅上面的下载部分)。
打开附加的工作区。工作区读取输入shapefile数据集并在将数据写入GML之前重新投影数据。在运行工作区之前,我们希望从源数据集创建一个zip文件,如果它不存在,则将它放在C驱动器上的一个临时文件夹中。如果已存在同名的ZIP文件,则不复制该文件,并将消息打印到日志窗口。前往导航器>工作区参数>脚本>启动Python脚本查看脚本或查看以下内容。
#进口FME和shutil模块导入FME,从OS导入路径#文件路径shutil硬编码到C:\ TEMP workspacePath = 'C:\\ TEMP' 使用macroValues字典的SourceFile = fme.macroValues [ 'SourceDataset_ESRISHAPE']#源数据集的#文件路径 Gets dataset name without extension with '_backup' appended sourceName = path.splitext(path.basename(sourceFile))[0] + '_backup' # Path of new zip with name zipDir = '{}\\{}'.format(workspacePath,sourceName) # Root directory of folder containing source dataset sourcePath = path.dirname(sourceFile) # If zip file with same name already exists, do not create, add message to log window if path.exists(zipDir + '.zip'):# Message to log window print(zipDir + '.zip already exists.没有创造拉链。“)其他:#使用shutil模块来创建压缩文件shutil.make_archive(zipDir,‘拉链’,SOURCEPATH)打印(”创建备份“+ path.basename(的资源文件)打印)(”在路径“ + zipDir + '.zip') # Debugging # print(sourceName) # print(zipDir)
该脚本进口口蹄疫,舒蒂尔模块和路径类从os模块。该shuil.make_archive()(第23行),需要至少3个参数:
我们可以使用Python函数和FME宏发现所有的第一个和第三个参数。在这个例子中,我们要建立在C源数据集的zip文件:\ TEMP文件夹同名的shape文件和文本“_backup”。
为了找到shape文件的名称,我们可以使用fme.宏值[]字典查找使用源数据集参数(中的资源文件脚本)源数据集的文件路径,并获得唯一的文件路径的最后一部分。
在这个例子中,它是“源数据集”。您的源数据集参数可以有另一个名字,您可以在导航窗格中,选择来源的读者发现通过右击编辑用户参数定义在这里你可以看到名称参数。
源数据集参数的名称通常可以通过右键单击导航器窗格中的读取器并选择“编辑用户参数定义”来找到。
为了让数据集名称不带扩展名(脚本SOURCENAME),我们可以使用路径.basename()从功能操作系统模块要查找的文件名。该path.splitext()功能将分裂在第一个文本“”和我们在文件名,而不是扩展只关心,我们只用[0]返回第一段文字。我们追加“_backup”在文件名末尾。
我们完成创建通过采取目标文件夹(硬编码为workspacePath)全拉链路径,加入“\\”,文件名(SOURCENAME),并加入“_backup”。需要注意的是,因为反斜杠字符是在Python转义字符,我们需要在文件路径中使用双反斜线。
接下来,我们需要找到包含数据压缩的文件夹,因为shape文件是基于文件夹的格式,所以你不能简单地只复制.shp文件。正如我们已经找到了源数据集文件的文件路径,我们可以使用路径.dirname()函数来获得包含数据(SOURCEPATH脚本)的文件夹的文件路径。
为了防止具有相同名称覆盖现有数据集,源数据集的zip文件备份只创建如果不存在的话。如果是这样,只有一个消息将打印到日志中。这通过控制如果/其他声明。最后三行的打印功能进行调试。
如果在备份位置中已经存在同名的文件,则在转换日志窗格中打印消息。在这种情况下,不会创建zip文件。
运行工作区(运行>运行工作区或按F5)。工作区运行完毕后,进入C:\ TEMP文件夹。您应该看到在末尾“_backup”你的输入数据集名称的压缩文件。
注意:您没有写入到C:\ TEMP。您可以将脚本改为写入到另一个硬编码的文件路径,而不是或使用已发布的参数要求用户选择他们想要的zip文件被写入到每次运行工作区的时间。
附加工作区:StartupPython2.fmw
日志文件中包含了大量的信息了,不过如果你想要编写自定义消息日志文件?您可以通过启动Python脚本,PythonCaller变压器,并关闭Python脚本添加自定义消息到日志文件。在这个例子中,你将被添加的短消息与一个启动Python脚本日志文件。
我们可以用下面的启动Python脚本运行FME之前编写自定义的消息日志文件(请参阅启动python2.fmw):
#导入FME对象模块进口fmeobjects#创建FME日志记录称为记录= fmeobjects.FMELogFile()#呼叫logMessageString方法来添加自定义文本logger.logMessageString(“您可以添加自定义消息到日志文件”)文件对象名称#演示打印 statement will only print to log pane print('This will only print to the Translation Log pane')
与FME对象模块,所以我们需要您可以访问日志文件导入fmeobjects.然后通过调用创建了一个名为“记录”的日志文件对象fmeobjects.FMELogFile()类。然后,对象调用日志消息字符串()方法自定义文本添加到日志文件。打印功能是展示打印到该消息翻译日志窗格将不会出现在翻译的日志文件。
打开附加的工作区。它看起来非常相似的第一个例子。运行工作区(运行>运行工作区或按F5)。转至窗格内的转换日志窗格,单击鼠标右键。从菜单中选择并键入“日志”“查找”。您应该在翻译日志窗格。您将在窗格中看到自定义日志消息和突出显示的打印消息。
第一个高亮显示的行是用logger对象的logMessageString方法创建的。使用打印功能创建第二条高亮显示的行。
转到保存附加工作区的文件夹位置。日志文件应保存在相同的文件夹位置(默认情况下),并且应与工作区同名,但扩展名为.log。使用任何文本编辑器打开日志文件。使用搜索功能在日志中查找自定义消息。请注意,打印消息未保存在翻译日志文件中。
注意,使用print函数添加的文本不会出现在日志文件中。只有使用logger对象的logMessageString方法添加的文本才会出现在日志文件中。
注意:将自定义消息写入日志文件的方法取决于它是在启动还是关闭阶段。在启动脚本中(因为FME已经打开了日志文件,并且多次打开很危险),应该使用fmeobjects.FMELogFile().
要访问Workbench中启动和关闭脚本的帮助文档,请转到:启动和关闭Python脚本
有关可用于启动Python脚本的FME变量的完整列表,请转到:FME_BEGIN_巨蟒
您可以在这里找到Python FME Objects API的完整文档:FME对象Python API
此处使用的数据源于温哥华市,不列颠哥伦比亚省。它包含根据开放的政府许可证-温哥华许可的信息。
?2019安全亚搏在线软件公司|合法的