西班牙
斯潘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文件备份。您可以使用附加的工作区模板,StartupPython1.fmwt(有关链接,请参阅上面的下载部分)。
打开附加的工作区。工作区读取输入shapefile数据集并在将数据写入GML之前重新投影数据。在运行工作区之前,我们希望从源数据集创建一个zip文件,如果它不存在,则将它放在C驱动器上的一个临时文件夹中。如果已存在同名的ZIP文件,则不会复制文件,并将消息打印到日志窗口中。前往导航>工作场所参数>脚本>启动 - Python脚本查看脚本或查看以下内容。
#导入fme和shutil模块导入fme, shutil从操作系统导入路径# Filepath硬编码到C:\TEMP workspacePath = 'C:\\TEMP' # Filepath的源数据集使用宏值字典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.else: #使用shutil模块创建zip文件shutil。make_archive(zipDir, 'zip', sourcePath) print('Created backup of ' + path.basename(sourceFile)) print('Path at ' + zipDir + '.zip') # Debugging # print(sourceName) # print(zipDir)
脚本导入FME,shutil模块和路径类从操作系统模块。的shutil.make_archive()(第23行)至少需要3个参数:
我们可以使用Python函数和FME宏来查找所有的第一个和第三个参数。在本例中,我们希望在C:\TEMP文件夹中创建源数据集的zip文件,其名称与shapefile和文本“_backup”相同。
要查找shapefile名称,可以使用fme.macroValues []使用源数据集参数(脚本中的sourceFile)查找源数据集的文件路径,并仅获取文件路径的最后一部分。
在本例中,它是'SourceDataset_ESRISHAPE'.您的源数据集参数可能有另一个名称,您可以通过在Navigator窗格中右键单击source reader并进行选择来找到该名称编辑用户参数定义可以看到Name参数。
源数据集参数的名称通常可以通过右键单击导航窗格中的阅读器并选择编辑用户定义的参数中找到。
要获得不带扩展名的数据集名称(脚本中的sourceName),可以使用path.basename()函数的口模块查找文件名。的path.splitext()函数将分割文本的第一个'。’ and as we are only interested in the file name and not the extension, we only return the first piece of text with [0].我们将' _backup '附加在文件名的末尾。
我们通过获取目标文件夹(硬编码为workspacePath)、添加“\\”、文件名(sourceName)和添加“_backup”来完成完整zip路径的创建。注意,因为反斜杠字符是Python中的转义字符,所以我们需要在文件路径中使用双反斜杠。
接下来,我们需要找到包含要压缩的数据的文件夹,因为shapefile是基于文件夹的格式,所以不能简单地复制.shp文件。由于我们已经找到了源数据集文件的文件路径,所以可以使用path.dirname()函数获取包含数据的文件夹的文件路径(脚本中的源路径)。
为了防止覆盖具有相同名称的现有数据集,仅在源数据集不存在的情况下创建源数据集的zip文件备份。如果是,则只有一条消息将打印到日志中。这是由如果别的声明。最后三行是用于调试的打印函数。
如果具有相同名称的文件已经存在备份位置,在转换日志窗格打印消息。在这种情况下,压缩文件不会被创建。
运行工作区(运行>运行工作区或按F5)。工作空间完成运行后,转到C:\TEMP文件夹。您应该会看到一个zip文件,其中包含您的输入数据集名称,末尾是' _backup '。
注意:你不必写C:\TEMP。您可以更改脚本,将其写入另一个硬编码的文件路径,或者使用一个已发布的参数,让用户在每次运行工作区时选择将zip文件写入到何处。
附工作区:StartupPython2.fmw
日志文件已经包含了很多信息,但是如果您想要将自定义消息写入日志文件,该怎么办呢?您可以使用启动Python脚本、PythonCaller转换器和关闭Python脚本将自定义消息添加到日志文件中。在本例中,您将使用启动Python脚本向日志文件添加一条短消息。
我们可以在使用下面的启动Python脚本运行FME之前将自定义消息写入日志文件(请参阅StartupPython2.fmw):
创建FME日志文件对象的名称叫做logger logger = fmeobject . fmelogfile() #调用logMessageString方法来添加自定义文本日志记录器。logMessageString(“您可以将自定义消息添加到日志文件中”)#演示了打印语句将只打印到日志窗格中
您可以使用FME对象模块访问日志文件,因此我们需要这样做进口fmeobjects.然后通过调用创建一个名为“logger”的日志文件对象fmeobjects.FMELogFile()类。对象然后调用logMessageString()方法将自定义文本添加到日志文件。打印功能是演示消息打印到的转换日志窗格将不会出现在转换日志文件中。
打开附加的工作区。它应该与第一个示例非常相似。运行工作区(运行>运行工作区或按F5)。转到Translation Log窗格,在窗格中右键单击。从菜单中选择“查找”并键入“日志”。你应该看到中突出显示文本“日志”的情况下,转换日志窗格。您将看到自定义日志消息,并在窗格中突出显示的打印信息。
第一突出显示的行与该记录器对象的logMessageString方法创建的。第二突出显示的行是使用打印功能创建的。
去那里的附加工作区保存的文件夹位置。日志文件应该(默认)保存在同一文件夹位置,并应具有相同的名称作为工作区,但扩展名为.log。打开任何文本编辑器的日志文件。使用搜索功能查找日志中的自定义消息。请注意,打印信息不保存在翻译的日志文件。
注意使用打印功能不会出现在日志文件中添加的文本。使用记录器对象的logMessageString方法会出现在日志文件中只有文字添加。
注:编写自定义消息日志文件的方法取决于它是否在启动或停机状态。在启动脚本(因为FME已经日志文件打开,这是危险的多于一次打开它),你应该使用fmeobjects.FMELogFile().
要为Workbench中启动和关机脚本访问帮助文档,请访问:启动和关闭Python脚本
有关可用FME变量的完整列表启动Python脚本请访问:FME_BEGIN_PYTHON
你可以找到的Python FME的完整文档对象这里API:FME对象的Python API
这里使用源自从公开数据中的数据由提供温哥华市, 不列颠哥伦比亚省。它包含了开放政府许可协议进行许可信息 - 温哥华。
?2019安全亚搏在线软件公司|合法的