本教程共包含五篇难度依次渐进的系列文章,依次向大家介绍了Python编程语言,以及Python在FME中的主要应用,即启动Python脚本,脚本化参数,PythonCaller / PythonCreator转换器和关闭Python脚本等。
而本文是五篇系列文章中的第一部分,将向您系统地介绍Python编程语言,以及在FME Workbench中使用Python的基本信息,旨在帮助您开始接触和使用最基本的Python与FME。
Python是一种可以在FME中使用的编程语言,它的主要功能在于可以在FME运行之前或之后完成新的任务,或在FME中执行FME工具和转换器无法完成的任务*。例如,您可以使用Python脚本在数据进行转换之前或之后移动该数据。
在FME中4种常见的使用Python的情况:
(1)启动Python脚本
(2)脚本化参数
(3)PythonCaller和PythonCreator转换器
(4)关闭Python脚本
(*注意:FME中有许多转换器可以执行几乎所有您可以想到的任务,而无需借助脚本。所以您在考虑编写Python脚本以在FME中执行某些操作前,可以先查询是否有现成的转换器可以直接使用。)
网上有很多免费的资源和书籍可供我们学习Python语言,在这里我们推荐几个资源网址:
FME针对不同的系统将使用不同的解释器。在Windows系统环境下,除非另有说明,否则FME将安装自己的Python解释器,供FME在Windows上运行的所有Python脚本使用。而在Mac和Linux系统上,FME则会使用系统Python解释器。
如果您希望FME使用其他Python解释器的话,您可以在FME Workbench菜单中的“工具”> “FME选项”>“转换”下自定义选择您的FME要使用哪个Python解释程序进行翻译。可供选择的解释器(如图)包括:FME自己的Python解释器,Esri ArcGIS解释器或自定义解释器等。
FME与许多版本的Python均兼容,您可以通过“工作台导航”窗口中的“ Python兼容性”参数指定对Python版本的兼容性级别(如图)。例如,Python 3.0中引入了对Python 2.x不向后兼容的重大更改,因此通过该参数为您的工作区设置最佳兼容级别很重要。
值得注意的是,从FME 2019开始,Python 2.7将是Windows平台的可选安装组件,需要用户自定义是否需要安装。
(注意:工作区“导航器”窗口中的“ Python兼容性”参数应优先于“ FME选项”中的“ Python解释器”设置。)
FME启动和关闭脚本中提供了许多与FME相关的Python变量,例如,fme.status变量在转换结束时为true或false,取决于工作空间的成功或失败,而这些变量可在FME模块中通过语句import fme来进行访问。
此外,“启动”和“关闭” Python脚本的FME变量的完整列表可以在Workbench中的“启动”和“关闭” Python脚本的“帮助”页面上找到。
与FME相关的变量之一,fme.macroValues [],是关于运行工作区时已知的每个FME参数的字典。其中,字典由参数名称进行索引并保存参数值。
这些参数值通常会在Python脚本中被使用,例如,当您想知道读模块或其他用户自定义参数中使用的源数据集的文件路径时,您就可以通过访问该变量fme.macroValues []获得。
例如,如果要获取AutoCAD格式读模块的源数据集参数的值,并且该参数名为SourceDataset_ACAD,则可以像这样在Python中访问此参数:
import fme
SourceDataset = fme.macroValues['SourceDataset_ACAD']
我们还可以通过创建脚本化参数,并基于脚本的返回值来设置FME参数。当我们运行工作空间时,脚本参数将在启动脚本之前按照在导航器窗口中的出现顺序执行。
通过使用FME Objects Python API中的FME类和方法,可以在Python脚本中使用FME的许多核心功能。例如,您可以通过API访问FME日志文件,FME参数或使用任何FME方法,例如getArea或reproject等。而要在Python脚本中使用FME对象,您将需要使用以下语句导入FME对象:
import fmeobjects
您可以在这里找到FME Objects API的相关文档:http://docs.safe.com/fme/html/fmepython/
您可以参阅这里获取有关如何使用FME对象的指导:https://community.safe.com/s/article/when-should-i-use-fme-objects
您可以在这里找到有关FME Objects Python API的更多信息:https://community.safe.com/s/article/new-python-fme-objects-api-in-fme-2012
您可以在这里查看关于2012年6月Python网络研讨会的记录:https://www.safe.com/webinars/python-scripting-in-fme/