主题中的问题:“初学者使用的python” https://knowledge.亚搏在线safe.com/questions/topics/single/44945.html “针对初学者的python”主题的最新问题 在FME中关闭python脚本 https://knowledge.亚搏在线safe.com/articles/60412/shutdown-python-scripts-in-fme.html

本文是由5部分组成的系列文章的第5部分,旨在帮助您开始基本的Python和FME。本文将在Workbench中使用Shutdown python脚本功能,并包括使用Shutdown python脚本发送电子邮件转换统计信息的示例。使用文件格式的默认应用程序打开输出数据集,并写入翻译历史日志。

内容

  • 介绍
  • 下载
  • 示例1:电子邮件翻译统计
  • 例2:使用默认应用程序打开输出数据集
  • 示例3:创建翻译历史日志
  • 文档
  • 数据属性
  • 教程导航

介绍

可以将Python脚本添加到工作区中,工作区完成时将运行该工作区。例如,当工作区完成时,您可能希望将文件复制到某个地方,或者使用非数据检查器的应用程序打开输出数据集。

关闭脚本在所有变压器之后运行,读者,作家们,并且日志文件在成功的转换中被关闭。如果翻译失败,脚本仍将执行,但可能只会失败fme.状态fme.failureMessage保证包含有效值。

正如在帮助页中提到的启动和关闭脚本,不建议使用带有关闭脚本的FME对象python api中的任何模块,因为FME对象所需的资源不再可用,因此对api的调用将产生不可预知的结果。

然而,您可以使用与启动脚本相同的方式访问FME参数值,脚本参数,的python调用宏观价值观字典。关闭Python脚本还可以访问FME创建的许多全局变量,例如fme.featuresReadFME.特征写入,还有更多。此外,脚本可以访问启动python脚本中设置的任何全局python变量。有关全局变量的完整列表,请参阅启动和关闭python脚本的帮助页,在这个话题FME_END_PYTHON.

下载

示例1:电子邮件翻译统计

附加工作区:ShutdownPython1.fmw

在这个例子中,我们在工作区中添加了一个shutdown python脚本,当工作区完成时,该脚本使用gmail发送电子邮件。如果您愿意,可以编辑该脚本以使用其他邮件服务器。电子邮件的主题将说明工作区是否成功,并包括编写的功能数量。在帮助页面上也可以找到类似的例子启动和关闭python脚本.也可以使用电邮者变压器。

打开ShutdownPython1工作区(请参阅上面的下载部分)和导航器窗格中的工作区参数>脚本,您将看到一个名为的参数关闭Python脚本.您可以在这里输入或查看下面的python代码,该代码将使用gmail帐户发送电子邮件。

导航窗格中shutdown python脚本参数的位置

脚本导入SMTPLIBfme模块,这使得电子邮件工具和访问FME字典分别。下一节检索用户设置的FME参数。然后脚本获取所编写的功能的数量,并将该数量转换为文本。if/else语句根据转换是否成功来确定要使用的消息文本。最后一部分讨论使用gmail smtp服务器发送电子邮件。

#smtplib提供了电子邮件工具simport smtplib,FME获取在工作区运行时设置的FME参数值to=FME.macrovalues['emailto']gmail_user=FME.macrovalues['gmail user']gmail_pwd=FME.macrovalues['password']subject=FME.macrovalues['successsubject']failsubject=FME.macrovalues['failsubject']emailfrom=FME.macrovalues['emailfrom']获取功能数fme wrotefeaturesWriten=str(fme.features written)如果fme失败,则更改主题fme u状态指示fme是否成功status=fme.status if status==0:subject=failsubject message='工作区失败'否则:message='工作区成功写入以下功能:'+features written使用gmail smtp服务器发送电子邮件您可以n编辑此行以使用您自己的电子邮件服务器smtpserver=smtplib.smtp(“smtp.gmail.com”,587)smtpserver.ehlo()smtpserver.starttls()smtpserver.ehlo()smtpserver.login(gmail_user,gmail_pwd)header='到:'+到+'\n'+'来自:'+emailFrom+'\n'+'主题:'+Subject+'\n'print headermsg=header+'\n'+message+'\n\n'smtpserver.sendmail(gmail_用户,,msg)打印“做!”smtpserver.close()

有两个要点需要注意:

a.我们正在使用宏观价值观字典的方式与Startuppython脚本和脚本参数文章中的示例相同。例如,当运行工作区时,可以设置gmail用户名,并通过如下发布的参数访问该用户名:fme.macroValues(“GmailUser”).

B.其次,注意,我们使用两个全局变量fme模块:FME.特征写入这是一个按特性类型索引的Python字典,和FME.状态它是一个布尔值,告诉我们工作区是成功还是失败。

使用运行工作区文件>提示运行或者选择提示和运行按钮,然后是运行按钮。将出现“转换参数”对话框。填写适当的参数。您需要自己的gmail帐户用户名(电子邮件地址)**和密码,以及一个发件人电子邮件地址,该地址应与用户名相同。也,填写“收件人”电子邮件地址(可以与“发件人”电子邮件地址相同)和“失败和成功”主题行。在附加的示例工作区中,Fail参数用于通过向终止变压器发送特性来模拟工作区故障。单击OK发送。

* *请注意:如果您的gmail帐户启用了双因素身份验证,您可能需要生成与Gmail帐户关联的应用程序密码。登录到您的Gmail账户,您会发现在我的账户>登录与安全下有一个生成应用程序密码的页面。一旦你生成了一个,运行工作区时,输入应用程序密码作为密码。如果使用普通密码,python脚本可能无法执行,并显示消息“用户名和密码不被接受”。

有关使用gmail时身份验证问题的详细信息,请参阅以下两篇知识中心文章:

IMAP发布或电子邮件订阅没有读取来自Gmail的电子邮件

使用Gmail作为FME服务器电子邮件订阅时的身份验证问题

shutdownpython1.fmw的“转换参数”对话框

您(或您的收件人)应该会很快收到shutdown Python脚本发送的电子邮件。如果您为fail参数选择了“No”,那么它应该是这样的:

关闭脚本发送的成功翻译电子邮件的示例

或者如果您为fail参数选择了“Yes”:

关机脚本发送的失败翻译电子邮件示例

示例2:使用默认应用程序打开输出数据集

附加工作区:shutdownpython2.fmwt

工作台,用户可以选择重定向写入数据检查器的数据集。然而,如果用户希望使用数据的默认应用程序自动打开目标数据集,该怎么办?可以使用关闭Python脚本来实现这一点。

在这个例子中,在翻译完成后,我们使用关闭Python脚本打开CSV文件。为此示例选择了一个csv文件,因为它是大多数用户都可以打开的文件格式。但是,您应该能够使用该格式的默认应用程序使用该脚本打开其他文件格式。

正常开放ShutdownPython2.fmwt.工作区非常简单。它从CSV文件中读取温哥华市内的各个树数据。安属性管理器用于删除不需要的任何属性。安聚合器用于求一个邻域内的树的数量,以及求一个邻域内所有树的平均高度和直径。输出被写成一个csv文件。

shutdownpython2.fmwt的工作区,用于从csv读取树数据,按邻域聚合数据并以CSV格式写入输出。

关机脚本用于在机器上使用默认应用程序集打开输出CSV文件。在导航窗格中,去工作区参数>脚本>关闭Python脚本如果您正在使用自己的数据创建工作区,则可以在下面查看脚本或复制脚本。

进口子流程,故障模式与影响分析,Windows 64位上常见csv默认应用程序的系统路径r“C:\Program Files(x86)\Microsoft Office\Office15\Excel.exe”r“C:\Program Files(x86)\Notepad++\Notepad++.exe“R”C:\Windows\System32\Notepad.exe”使用fme的宏值字典获取outputDir=fme.macro values的目录位置['DestDataset_CSv2']使用fme的宏values dictionary to get output file name output name=fme.macrovalues['csv_file_name']append directory and file name to get file path of output file output path='\'。格式(outputdir,输出名称'csv')用于调试的打印功能打印(outputpath)使用子进程模块打开具有默认应用程序的输出文件尝试:使用shell=false,您应该指定默认应用程序的完整文件路径,并输出文件取消注释下面的行,添加适用的文件路径,然后注释掉shell=True所在的行。#p=子进程.popen([“
       
        “,“
        
         ”),P = subprocess.Popen([outputPath],shell=true)print(“output csv file successfully opened”),但e:print(“shutdown script failed”)除外。错误:”,e)
        
       

脚本相对简单。使用子过程fme模块,脚本查找并创建一个包含输出数据集的文件路径的变量。该变量用于子过程模块的popen构造函数,用于创建一个子进程,该进程使用格式的默认应用程序打开输出数据集。

使用了popen构造函数而不是子进程.call())因为调用()将使用与翻译引擎(fme.exe)相同的过程,这意味着直到用户关闭用于打开输出数据集的应用程序,您的转换才会完成。随着波本()构造函数创建子进程,exe可以在转换后关闭,工作空间不会挂起,直到应用程序打开时关闭。

重要提示:使用shell = True论点的Popen通常不建议使用构造函数,因为这会使程序容易受到shell注入的攻击,如果与不受信任的输入结合使用,则可能会造成安全隐患。更多信息,请参见下面的官方python文档:Python Popen构造函数.这个shell = True参数用于简化,因为它不需要指定应用程序路径。在这种情况下,由于工作区用户负责命令的输入,它对安全危害较小。然而,自行承担风险.

如果你想用shell = False作为参数,取消对以下行的注释:

P = subprocess.Popen ([”
       
        “,“
        
         ”),壳牌=假)
        
       

取代 使用适用的文件路径。确保保留引号。在包含shell = True.

确保快速运行已启用并运行工作区。输入参数或保留默认值。6项功能应写入输出csv文件。设置为计算机上csv文件格式默认值的应用程序应该自动启动,并且您应该能够查看和编辑输出csv文件。

翻译日志窗格中的消息,表示输出csv文件已成功打开。如果无法打开csv文件,将显示一条错误消息。

Gif演示关闭Python脚本的行为。请注意,当工作区完成时,Microsoft Excel将打开输出csv文件。

示例3:创建翻译历史日志

附加工作区:ShutdownPython3.fmw

如果工作区多次运行或按计划运行(例如:如图所示),用户如何跟踪转换批处理方法1:命令行或批处理文件文章)?当然,如果在Workbench中选择了“附加到日志”选项,则可以查看日志文件。(有关日志文档,请参阅此处)或者,如果指定了要在批处理文件中创建的日志历史记录。但另一种选择是使用shutdown python脚本为特定工作区创建翻译历史日志。

在这个例子中,关机脚本将创建或附加到CSV日志,其中包含用户可能感兴趣的属性,如转换状态、翻译日期和时间,读写功能,翻译花了多长时间,等。要做到这一点,脚本利用了fme模块的全局变量。

打开附加的工作区(ShutdownPython3.fmw-请参阅上面的下载部分)。工作区非常简单,包含一个Sentinel2阅读器,测试器,GeoTIFF作家,和终结者。此工作区将检索与读者的标准匹配的最新图像,并将图像作为GeoTIFF光栅输出。

一个非常简单的工作区,演示如何使用shutdown python脚本创建翻译历史日志。

在下面的Navigator窗格中工作区参数>脚本,您将看到一个名为的参数关闭Python脚本.双击以打开脚本编辑器窗口。如果您正在创建自己的工作区,复制并粘贴下面的python代码,该代码将创建翻译历史日志或附加翻译详细信息。

输入模块导入FME,csv、datetimefrom os import path get current date and timedatetitoday=date time.date.today().strftime('%y/%m/%d')time now=date time.date time.now().time().strftime('%h.%m.%s')获取工作区的目录路径将后斜杠替换为前斜杠,以避免转义字符issuesworkspace=fme.macrovalues['fme_mf_dir']workspace=workspacepath.replace('\','/')获取工作区名称workspace name=fme.macrovalues['工作区名称']为主文件创建文件路径master file='.csv'。格式(workspacenpath,如果主文件已经存在,如果path.exists(masterFile) == True: # Create CSV writer with open(masterFile,’ab’)作为csvfile: writer = csv.writer(csvfile,分隔符=“,”,QuoTeCar=“”,报价=csv.quote_minimal)如果翻译状态成功,如果fme.status==true:writer.writeRow([日期今天,蒂梅诺,FME.状态,fme.failureMessage,时间流逝,fme.总特性读取,fme.记录的总特性,如果翻译状态不成功,只写入状态和失败消息:writer.writerow([dateToday,蒂梅诺,FME.状态,如果主文件不存在,打开并写入文件其他:打开(主文件,创建CSV writer = CSV .writer(csvfile,分隔符=“,”,QuoTeCar=“”,.writerow(['Date',“时间”,'翻译状态','故障消息','翻译时间','totalfeaturesread','总功能写入',如果翻译状态成功,如果fme.status==true:writer.writeRow([日期今天,蒂梅诺,FME.状态,fme.failureMessage,时间流逝,fme.总特性读取,fme.记录的总特性,如果翻译状态不成功,只写入状态和失败消息:writer.writerow([dateToday,蒂梅诺,FME.状态,除了e:print(“写入翻译历史失败”)print(“错误:”,e)

为简单起见,翻译历史日志将在与工作区相同的文件夹中创建,并具有与工作区相同的名称。脚本使用宏观价值观字典,要获取包含工作空间的文件夹的路径,以及带有宏(预定义参数)的工作空间名称FMyMfdidir'工作区名称'为翻译历史文件创建文件路径。

实际创造,csv文件的写入/追加由嵌套的如果/其他声明。第一个如果/其他检查翻译历史文件是否存在path.exists ().如果以前没有运行工作区,没有翻译历史记录(path.exists ()错误)。将使用内置的python函数open()打开csv日志,方法是二进制写入'白')模式。

然后脚本将写入两行:第一行,标题行,因为此行不存在,第二,包含翻译详细信息的行。使用全局变量(如fme.elapsedRunTimefme.totalFeaturesWrittenfme.totalFeaturesRead,等。完整的列表fmePython关机脚本可用的函数和变量,请参见下面文档部分的fme_end_python。

如果工作区以前运行过,翻译历史文件已经存在,因此附加在二进制模式AB型“)被使用。append将写入文件结尾,这意味着前面的行不会被覆盖和丢失。此外,将另一个头行写入文件是没有意义的,因为一个头行已经存在,所以只需要编写翻译细节行。

第二如果/其他语句检查翻译状态FME.状态变量。记得,如果翻译失败,只有FME.状态fme.failureMessage保证包含有效值。为了避免无效值的潜在问题,如果FME.状态不是真正的(即翻译失败),只有日期,时间,翻译状态,并写入失败消息。

运行工作,为输入“否”终止转换参数,并输入要在其中写入输出的位置。该特性通过通过测试器端口。工作区完成后,转到保存工作区的文件夹。您应该看到一个与工作区同名的csv文件(关闭python3.csv对于这个例子)。打开文件。应该有两行:标题和包含刚完成翻译的详细信息的行。关闭csv文件。

工作区成功运行后转换历史记录如何显示。

返回工作区。再次运行工作区,但为选择“是”终止转换参数。这次,当该特性通过。时,由于终止符而导致转换失败失败测试器端口。

通过将特征定向到终端变压器来强制转换失败.

打开翻译历史文件。应该有第三行只包含日期,时间,翻译状态,以及故障信息。

翻译历史日志的最后一行应该只包含翻译失败后的四个值。

现在,您可以使用.bat文件(或您的OS等效文件)运行工作区,任务调度器,甚至可以通过工作台手动进行,并在一个易于搜索的文件中记录工作区的每个翻译。

有关更复杂的关闭Python示例,请参阅文章:

使用FME的工作亚搏在线流程示例,python和oracle

文档

要访问Workbench中启动和关闭脚本的帮助,从菜单栏打开帮助,在搜索栏中输入关键字“Python”,选择合适的条目,或者去:

启动和关闭python脚本

有关可用于关闭python脚本的FME变量和函数的完整列表,请转到:FME_END_PYTHON

您可以在这里找到python FME对象API的完整文档:fme对象python api

数据属性

这里使用的数据来源于温哥华的城市,不列颠哥伦比亚省。它包含根据开放政府许可证(温哥华)获得许可的信息。

教程导航

第1部分:Python和FME基础知识

第2部分:在FME中启动python脚本

第3部分:python脚本化参数

前:PythonCaller Transformer

当前:在FME中关闭python脚本

python python脚本 初学者用蟒蛇 python脚本关闭 结婚,2017年12月20日00:17:51格林尼治标准时间 DebbiAt亚搏在线Safe
皮通卡勒变压器 https://knowledge.亚搏在线safe.com/articles/60319/pythoncaller-transformer.html网站

本文是由5部分组成的系列文章的第4部分,帮助您开始学习基本Python和FME。本文是关于在工作台中使用pythoncaller变压器的,包括三个使用功能分别。

内容

  • 介绍
  • FME对象和python
  • 下载
  • 示例1:向功能添加属性的python函数
  • 示例2:用于FuzzyStringComparer定制转换器的Python函数
  • 示例3:python类,用于计算所有功能的区域
  • 示例4:python类,用于自动定义自定义kml文件夹层次结构
  • 文档
  • 数据属性
  • 教程导航

介绍

这个PythonCaller变压器允许您使用Python脚本对特性或特性组执行操作。在使用这个变压器之前,请确保没有一个FME变压器可以完成您想要做的任务。浏览FME变压器画廊或询问FME社区亚搏国际在线官网FME知识中心问答论坛看看有没有变压器能帮你。

PythonCaller可以调用一个函数,您可以使用该函数一次处理一个特性,也可以调用一个类,您可以在该类中对一组特性执行操作。PythonCaller可以使用所有的FME对象,包括许多方法和类。

FME对象和python

通过使用来自FME对象Python API的FME类和方法,Python脚本中可以使用FME的许多核心功能。有关fme对象python api的更多信息,请看简介python和fme基础文章。

下载

示例1:向功能添加属性的python函数

附加工作区:pythoncaller 1.fmw

和所有变压器一样,FME工作台将包含一个按钮,用于在参数编辑器窗格。在这种情况下,我们将使用包含在PythonCaller帮助下函数接口示例向功能添加时间戳的部分。这不是PythonCaller因为这个任务可以用标准的FME日期时间篡改变压器完成。然而,这是一个简单但有效的示例,演示了如何使用转换器。

您可以通过使用示例创建自己的工作区来执行该练习,也可以查看最终工作区。(蟒蛇1.fmw)下载,可在上述下载部分找到。

来自PythonCaller transformer帮助文档的PythonCaller函数接口示例。

添加一个PythonCaller转换到您的工作区并选择它。你应该看到参数编辑器位于工作台窗口左下角的窗格。如果您没有看到它,可能有一个标签,它的左边翻译日志窗口或您可以从菜单中打开它视图>窗口>参数编辑器.

关于如何访问pythoncaller的python脚本编辑器窗口的说明。

单击右边的省略号Python脚本用于打开代码编辑器的参数。注意,这里已经有了一个模板函数和类。删除模板,因为我们用的是功能现在。重命名函数timestampFeature并从PythonCaller帮助页面功能界面示例部分或从下面。您可能需要在代码中添加一些换行符和缩进,使代码看起来像这样(记住,在python中缩进内容):

导入fmeobjectsimport time模板函数接口:def timestamp feature(feature):curtime=time.ctime(time.time())feature.setattribute(“timestamp”,宵禁时间)

脚本使用了一个FME对象方法,因此我们需要进口fmeobjects既然我们用的是蟒蛇时间模块,我们也需要进口。函数定义接受FME-特征对象作为其唯一参数,这意味着所有功能将逐个进入功能进行处理。

将一个新属性添加到特性中setAttribute()方法对特征-这实际上是一个FME对象方法。单击“确定”关闭代码编辑器。

在同一窗格中,设置要处理功能的类或函数函数名称的参数:timestampFeature.因为我们添加了一个名为时间戳我们可以通过在属性暴露参数。要公开新属性,双击字段或单击省略号,并在输入要公开的属性的值窗口。

在何处指定在PythonCaller中使用哪个类或函数,以及如何公开使用的Python脚本创建的属性。

使用Creator transformer创建一些特性发送给PythonCaller,使用Logger查看输出。运行工作区并查看翻译日志翻译完成后的窗格。您可能需要向上滚动以查看记录的功能。每个特性都应该有一个时间戳属性。

使用翻译日志窗格中的pythoncaller函数查看添加到每个功能的属性。

示例2:用于FuzzyStringComparer定制转换器的Python函数

附加工作区:pythoncaller 2.fmw

FME集线器包括一个名为FuzzyStringComparer它使用Python迪夫利布模块比较两个字符串属性并计算相似比。在某些方面,这是一个更好的例子,因为这是我们不能用常规的FME变压器做的事情。您可以查看最终工作区(蟒蛇2.fmwt)下载,可在上述下载部分找到。

打开一个空白工作区并为您的数据类型添加一个读卡器。添加一个attributeManager并为相似性比率创建一个新属性。找到FME轮毂变压器FuzzyStringComparer通过在画布上键入转换器名称或浏览FME轮毂变压器变压器廊道窗格。将其添加到工作区。

在Transformer Gallery窗格中查找FuzzyStringComparer的位置。

选择您想要比较的两个字符串属性,并输入您想要的名称作为相似性比率。这个名称应该与工作流中前面使用AttributeManager创建的新属性匹配。亚搏在线

选择变压器,右键单击并选择编辑查看其内容。将打开一个新的画布窗格选项卡。找到PythonCaller然后转到其属性以访问脚本编辑器。下面的代码可能看起来很复杂,但它与第一个示例有相似之处。

就本例而言,我们只关注直接相关代码的部分。再次注意,我们使用的是一个函数——这一次是根据一个特性逐个比较字符串属性。我们得到两个字符串属性feature.getattribute()。定义为字符串1string2相等分别。字符串与difflib.SequenceMatcher创建一个SequenceMatcher对象。通过调用SequenceMatcher对象的比率()方法,返回测量两个字符串相似性的比率。我们再次创建了一个名为的新属性模糊系统比较分配比率值。

import difflibimport sysdef fuzzystringcompare(feature):从attributesstring1=feature.getattribute('fuzzystringcompare.string1')string2=feature.getattribute('fuzzystringcompare.string2')version=sys.version_info[0]if string1!=无和字符串2!=无:如果版本>2,必要时转换为Unicode字符串:如果不是IsInstance(String1,str):string1=''。如果不是isinstance,则格式化(string1)(string2,str):string2=''。格式(string2)否则:如果不是isinstance(string1,unicode):string1=u''。如果不是isinstance,则格式化(string1)(string2,unicode):string2=u''。format(string2)calculate difference ratio s=difflib.sequencematcher(none,string1.lower(),string2.lower())ratio=s.ratio()update input stringsdiffer=difflib.ndiff(string1,string2)diff1='diff2='for line in differ:if line[0]='-':diff1=diff1+(line[2])diff2=diff2+''elif line[0]='+':diff1=diff1+''diff2=diff2+(第[2]行),否则:diff1=diff1+(第[2]行),diff2=diff2+(第[2]行),在featureFeature.setattribute('fuzzystringCompare.ratio',ratio)feature.setattribute('fuzzystringCompare.string1',diff1)feature.setattribute('fuzzystringCompare.string2',diff2)上设置新属性

像前面的例子一样,的PythonCaller参数对话框告诉PythonCaller变压器的功能调用和属性以公开。因为这是一个定制变压器,字段已经预先填充了“FuzzyStringCompare”(名称)功能)以及属性'模糊系统比较.ratio'(包含相似性比率的属性名)。安AttributeCreator稍后在自定义转换器工作流中用于访问我们创建和公开的属性。亚搏在线

请记住指定pythoncaller中使用的类或函数,并公开在pythoncaller中创建的任何属性。

连接检查器以查看输出。运行工作区并查看输出。您将看到一个值范围为0到1.0的新属性,它表示您指定的两个字符串属性之间的相似性比率。

注:如果Python代码中FuzzyStringComparer自定义变压器与上面的不同,您很可能下载了不同版本的自定义转换器。本文使用了第5版的Transformer。然而,这一原则或多或少应该保持不变。

示例3:python类,用于计算所有功能的区域

附加工作区:pythoncaller 3.fmw

我们将再次使用Transformer帮助页的类接口示例部分中提供的示例PythonCaller.这次我们将使用一个类而不是一个函数来计算所有特性的面积。这项任务是一个可以很容易地完成与变压器在FME。然而,在这里,我们将向您展示如何使用Python来突出显示这个过程。

对于已完成的工作区,请使用蟒蛇3.fmw从上面的下载部分。

pythoncaller Transformer帮助文档中的pythoncaller类接口示例

启动一个新的空白工作区并使用创造者创建多边形特性的转换器。要创建一个特性,打开创造者参数,双击几何对象,选择多边形,在下面加上至少三个坐标几何参数。添加一个PythonCaller变压器和连接a记录器以查看输出。

打开PythonCaller并在代码编辑器中打开脚本。如果要创建工作区,从Transformer帮助页中的示例或从下面复制代码。您可能需要在代码中添加一些换行和缩进,以便看起来像这样(记住在python中缩进很重要):

导入fmeobjectsClass FeatureProcessor(对象):def u init_uuuu(self):self.featureList=[]self.totalArea=0.0 def输入(self,feature):self.featureList.append(feature)self.totalArea+=feature.getGeometry().getArea()def close(self):用于self.featureList中的功能:feature.setAttribute(“总面积”,self.totalarea)self.pyoutput(功能)

我们再次使用了一些FME对象方法,所以我们需要进口fmeobjects.在输入方法,我们将每个功能添加到一个列表中,并从添加到总面积.在关闭方法,我们循环遍历每个特性并设置的值总面积total_area每个属性的属性。重要的是要注意,如果我们希望功能在工作区中继续运行,则必须使用pyoutput()方法。

单击“确定”关闭代码编辑器。在变压器中,你需要设置处理特性的类或函数到类名:功能处理器.因为我们添加了一个名为total_area我们可以通过在属性暴露参数。

请记住指定pythoncaller中使用的类或函数,并公开在pythoncaller中创建的任何属性。

运行工作区以确保total_area属性。打开创造者变压器和增加功能的数量。再次运行工作区,查看是否已计算出所有功能的总面积。

检查“翻译日志”窗格以验证计算的累计面积是否正确。增加第二次验证时创建的特性的数量。

示例4:python类,用于自动定义自定义kml文件夹层次结构

附加工作区:pythoncaller 4.fmwt

这个KML文件夹文章在kml转换教程中,概述了创建kml文件夹的两种不同方法,在GoogleEarthPlaces窗格中定义嵌套的树结构。第二种方法使用KML id定义一个自定义层次结构,直接控制文件夹命名,父子关系,和文件夹的水平。

为每个文件夹级别中的每个文件夹手动定义一个自定义文件夹层次结构,其中包含attributeCreators

然而,使用创建者为每个文件夹创建一个空的几何记录,并使用attributeCreator或attributeManager设置kml_id,KMLY-亲本,KMLL文档每个文件夹的属性都是耗时和劳动密集型的。使用一些转换器来准备数据和一个python类,您可以使这个过程自动化,并使其更加数据驱动。

对于已完成的工作区,请使用蟒蛇4.fmwt从上面的下载部分。

启动一个新的空白工作区,并将阅读器添加到画布中。输入功能有两个流,一个用于编写包含几何图形的功能,另一个用于定义和创建kml文件夹。在这个例子中,我们将集中在第二条河流上。

添加一个几何去除剂和一个属性管理器.这个过程的关键是找到每个级别需要创建的每个文件夹。要找到第一级和第二级文件夹的所有可能组合,创建二级文件夹属性和一级文件夹属性(示例工作区中的犯罪类型和邻居)的连接字符串,并在其中的两个属性值之间使用分隔符属性管理器.

创建第二级和第一级文件夹属性的串联字符串值,在这两个值之间使用分隔符。

添加唯一值记录器自定义变压器并设置属性分析参数设置为在属性管理器.它用于查找第2级和第1级属性(犯罪类型和邻居值)的所有惟一组合。添加一个PythonCaller并添加以下脚本:

导入fmeimport fmeobjects模板类接口:使用此类时,确保其名称设置为“要处理功能的类或函数”的值Transformer参数Class FeatureProcessor(Object):def u init uuu(Self):self.FeatureList=[]def input(Self,Feature):self.FeatureList.Append(Feature)def close(Self):for feature in self.FeatureList:ListAttr=Feature.getattribute(“值”)feature.setattribute(“kml_id”,listAttr)feature.setAttribute(“kml_name”,listattr.rpartition(';;')[0])feature.setattribute(“kml_parent”,listattr.rpartition(';;')[-1])self.pyoutput(feature)

脚本导入FME-对象模块,因为它使用FME对象方法。列表在中初始化_初始化__函数和功能将添加到此列表中输入函数使用追加方法。

关闭函数,我们遍历功能列表,并使用GET属性()方法。

要确定要创建的文件夹的名称,我们使用kml_名称属性。使用再分方法处理串联的字符串值,我们在分隔符/分隔符(示例中为“;”)处拆分该特性,并设置第一个元素,表示为listattr.rpartition(';;')[0],作为kml_名称(犯罪类型,在示例工作空间)。注意:是否使用第一个或最后一个元素将取决于连接字符串的结构。通过检查输出功能,确保使用正确的值。

同样地,要确定父文件夹,我们使用kml_parent属性。而不是使用再分,我们使用最后一个元素[1].此外,由于每个文件夹功能必须具有唯一的ID值,我们将连接的第一级和第二级字符串值设置为KMLYID.

因为我们需要为每个功能创建一个文件夹,我们需要使用self.pyoutput(功能)以确保空文件夹特性在工作区中继续。记住公开KML编写器所需的属性,例如kml_id,kml_名称,kml_parentPythonCaller.

第一级文件夹相对简单,因为它只需要第一级属性的每个唯一值。在这个例子中,这就是邻里价值。再一次,我们使用唯一值记录器查找唯一的一级文件夹属性。使用上面类似的python脚本,我们可以将唯一属性值设置为KMLYIDkml_名称.不必设置kml_parent对于一级文件夹。

为功能类型“folders”添加一个kml writer,并连接PythonCallers这个作家。然后,此功能类型编写器将为您的功能创建自定义文件夹层次结构。

工作区中的第二个流,它使用数据的属性定义自定义文件夹层次结构。

要将特征(与几何图形)与相应的父文件夹相关联,创建一个kml_parent属性,并将该值设置为KMLYID的文件夹中,您希望您的功能部件位于属性管理器.在示例工作区中,它是二级文件夹属性和一级文件夹属性值(@值(类型);;@value(邻居)在已完成的工作区中)。添加另一个kml feature type writer并连接属性管理器.

亚搏在线使用kml_parent属性将特性与适当的父文件夹关联的工作流。

运行工作区并在GoogleEarth中打开生成的kml文件。已创建自定义文件夹层次结构,并且您的功能与父文件夹相关联,允许数据组织和易于查看。

使用数据驱动流程使用UniqueValueLogger自定义转换器和Python脚本创建自定义KML文件夹层次结构的谷歌Earth中的数据视图。

文档

python相关的transformers在fme workbench中有很好的帮助,可以在帮助>fme transformers中访问。或者直接右键单击工作台画布中的Transformer并选择帮助(在菜单底部)。

您可以在这里找到python FME对象API的完整文档:fme对象python api

数据属性

这里使用的数据来源于温哥华的城市,不列颠哥伦比亚省。它包含根据开放政府许可证(温哥华)获得许可的信息。

教程导航

第1部分:Python和FME基础知识

第2部分:在FME中启动python脚本

上一篇:Python脚本参数

当前:PythonCaller变压器

下一步:关闭FME中的Python脚本

python 蟒蛇 python脚本 初学者用蟒蛇 妈,2017年12月18日23:45:31格林尼治标准时间 DebbiAt亚搏在线Safe
FME中的Python脚本参数 https://knowledge.亚搏在线safe.com/articles/60080/python-scripted-parameters.html

本文是由5部分组成的系列文章的第3部分,旨在帮助您开始基本的Python和FME。本文将在Workbench中使用脚本化参数功能,并包含脚本化参数的两个示例应用程序的演练。

内容

  • 介绍
  • 下载
  • 示例1:要读取的脚本功能类型
  • 示例2:具有脚本参数的唯一输出数据集名称
  • 文档
  • 数据属性
  • 教程导航

介绍

当我们想要在FME中基于从另一个或多个参数派生或计算的内容设置参数时,脚本化参数非常有用。例如,您可能希望用户选择主题或层组,并让脚本设置要在这些组中读取的各个特性类型。对于python脚本,许多FME变量在fme模块,其中一个返回FME参数及其值的字典。更多信息,请查看Python和FME基础介绍文章.

请注意已执行脚本参数之前python启动脚本和翻译。

下载

示例1:要读取的脚本功能类型

附加工作区:ScriptedParameter1.fmwt

scriptedParameter1.fmwt是根据用户选择的组编写功能类型脚本以读取参数的好例子。工作区模板,脚本参数1.fmwt,包含在ScriptedParameter_Workspaces.zip文件(参见上面的下载部分)。

这个工作区将有选择地读取带有脚本参数的特性类型。

使用运行>运行提示查看已发布的参数。一个翻译参数窗口将出现。单击窗口中的省略号以调出选择“层”项目窗口。请注意,可以从中选择的层是组:

  • 步行和骑自行车
  • 所有方法
  • 快速运输

要读取的特性类型由用户通过已发布的用户参数选择。

选择步行和骑自行车运行工作区。注意,工作区读取自行车道公共街道功能类型。

在选择“步行和骑自行车”作为参数后,将读取自行车道和公共街道的特征类型。

让我们看看用于告诉FME选择的脚本参数步行和骑自行车是否应该将这两种特性类型都返回要读取的功能类型参数。在导航器窗格扩展用户参数>私有参数您将看到一个Python脚本参数,名为feature_types_to_read.请注意,此参数链接到实际的要读取的功能类型工作区中读卡器的参数。脚本返回的任何值都将被AUTOCAD阅读器用于确定要读取的特性类型。

读取参数的特性类型被链接到私有脚本参数,“Feature”(功能)键入“to”(读)。

回到脚本参数,双击它,然后单击省略号以打开编辑器。下面是里面使用的脚本:

导入fmeFeatureTypes='if fme.macrovalues['layers'].查找(“步行和骑自行车”)!=-1:FeatureTypes+='PublicStreets Bikway'如果是fme.macrovalues['layers']。查找('rapid transit')!=-1:FeatureTypes+='RapidTransitLine RapidTransitStations'如果是fme.macrovalues['layers'].查找(“所有方法”)!=-1:FeatureTypes+='PublicStreets Bikway RapidTransitLine RapidTransitStations'调试打印(FeatureTypes)返回FeatureTypes

你可以看到我们有一系列如果语句,找出用户使用宏观价值观字典,然后设置特征类型它将被返回。最后一行是最重要的,因为这是我们用语句“返回”脚本参数的实际值的地方:

返回featureTypes

这个返回语句必须始终存在于Python脚本化的参数中,因为参数值就是在这里提供给FME的。也,注意注释掉了打印功能。你可以用打印函数通过将变量值返回到翻译日志窗格来帮助调试脚本。有关使用python进行日志记录的更多信息,请参阅本文:

使用Python脚本进行日志记录

示例2:具有脚本参数的唯一输出数据集名称

附加工作区:ScriptedParameter2.fmwt

在编写文件时,您可能希望确保您的输出是唯一命名的。一种方法是使用脚本化参数将日期和时间追加到输出数据集名称。附加的工作空间脚本参数2.fmwt接受输出数据集名称的已发布参数,私有脚本参数向已发布参数值追加惟一值(日期和时间)。工作空间本身会找到位于公园多边形内的点(饮水机),并输出一个csv文件。

此工作区将通过附加文件名转换的日期和时间来创建唯一命名的输出数据集。

打开工作区并确保快速运行(在运行菜单下找到)已启用。运行工作区和翻译参数窗口将出现。单击“确定”接受默认输出数据集名称。如果愿意,可以修改翻译参数,然后输出将与下面描述的略有不同。

工作区运行完成后,请查看“翻译日志”窗格。在日志末尾的功能摘要下,您将看到输出csv文件的名称。它将采用以下格式:<文件名< <名称< <HHMMSS>,请其中<文件名>是已发布参数的值(测试在示例工作区中,<名称>为当前日期,和<HHMMSS>是转换的开始时间。

通过使用脚本参数附加日期和时间来创建唯一的输出数据集名称。

导航器>用户参数>专用参数>名称随时间变化双击打开脚本编辑器。下面是里面使用的脚本:

#import fme module and date time.date time classimport fmefrom date time import date time获取已发布参数的值outfilename=fme.macrovalues['outfilename']使用now()方法获取当前日期和时间格式日期为y y y y m m d d_h h m m s s,strftime methodcurtime=date time.now().strftime(“%y%m%d_u%h%m%s”)连接p已发布参数,下划线,日期timeoutfilename=outfilename+''+curtime返回唯一文件名,该文件名成为脚本参数的值此脚本参数链接到目标数据集name返回outfilename

脚本使用宏观价值观通过调用字典和当前日期和时间日期时间方法。它连接两个值并返回唯一值(fileName_YYYYMMDD_HHMMSS)给作家的返回语句。记得,RETURN语句必须始终存在于脚本化参数中。

导航器>输出[csv2]>功能类型>$(namewithtime)>参数>常规>csv文件名.注意,csv文件名链接到private用户参数姓名和时间.

csv file name参数链接到私有脚本参数name WithTime',它使用Python创建一个惟一的文件名。

注意:如果不使用脚本化的python参数(例如,通过使用DateTimeNow()在文本编辑器中可用的函数)。

有关Workbench中的日期/时间函数的更多信息,请参阅帮助文档:

日期/时间函数

文档

对于在Python中使用FME对象,您可以在这里找到python FME对象API的完整文档:fme对象python api

数据属性

这里使用的数据来源于温哥华的城市,不列颠哥伦比亚省。它包含根据开放政府许可证(温哥华)获得许可的信息。

教程导航

第1部分:Python和FME基础知识

上一篇:在FME中启动Python脚本

当前:python脚本化参数

下一个:pythoncaller变压器

第5部分:在FME中关闭python脚本

python python脚本 初学者用蟒蛇 脚本化python参数 星期五,2017年12月15日格林尼治时间3:37 DebbiAt亚搏在线Safe
在FME中启动python脚本 https://knowledge.亚搏在线safe.com/articles/59997/startup-python-scripts-in-fme.html

本文是由5部分组成的系列文章的第2部分,帮助您开始学习基本Python和FME。这篇文章是关于使用启动python脚本工作台中的功能,包括两个示例。第一个脚本使用启动python脚本在运行转换之前复制文件,第二个脚本将自定义(用户定义)消息写入日志文件。

内容

  • 介绍
  • 下载
  • 示例1:创建源数据集的.zip文件备份
  • 示例2:使用启动Python脚本自定义日志消息
  • 文档
  • 数据属性
  • 教程导航

介绍

向工作区添加一个python启动脚本是扩展工作台功能的一个很好的方法。您可能希望在运行翻译之前以某种方式设置环境,或者您可能希望增加自定义脚本提供的对FME的控制。您可以在Workbench中直接定义脚本。在工作台导航器窗格中工作区参数>脚本,您将看到一个名为的参数启动python脚本.右键单击参数并选择编辑参数值打开一个特殊的python编辑窗口。在这里,您可以输入一些将要执行的python代码之前翻译,但是之后脚本参数的执行。

用户可以在工作区参数> Scripting > Startup Python Script下的Navigator窗格中的Startup Python Script参数中输入Python代码,这些代码将在转换之前执行。

注:如果您想设置或返回一个FME参数,这不是地方-见脚本化参数文章。

下载

示例1:创建源数据集的.zip文件备份

附加工作区:startuppython1.fmwt

您可能希望在运行转换之前或之后创建数据备份。使用启动python脚本或关闭python脚本都可以这样做。在这个例子中,您将创建shapefile输入数据集的zip文件备份。您可以使用附加的工作区模板,启动电源1.fmwt(有关链接,请参阅上面的下载部分)。

打开附加的工作区。工作区读取输入的SeabFeFLE数据集,并在将数据写入GML之前重新规划数据。在运行工作区之前,我们希望从源数据集中创建一个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已存在,请将消息添加到日志窗口。否则:#使用shutil模块创建zip文件shutil.make_archive(zipDir,'zip',(' create backup of ' + Path .basename(sourceFile))打印('Path at ' + zipDir + '.zip')

脚本导入fme舒蒂尔模块和路径从操作系统模块初始化。这个shutil.make_archive()(第23行)至少需要3个参数:

  1. 要创建的文件的名称,包括路径
  2. 存档文件的格式(本例中为zip)
  3. 包含要压缩的数据的文件夹

我们可以使用Python函数和FME宏来查找所有第一个和第三个参数。在这个例子中,我们要在c:\temp文件夹中创建源数据集的zip文件,该文件与shapefile和文本“_backup”同名。

要找到shapefile名称,我们可以使用宏观价值观字典,使用source dataset参数(脚本中的source file)查找源数据集的文件路径,并仅获取文件路径的最后一部分。

在这个例子中,它是“SourceDataset_ESRISHAPE”。源数据集参数可能有另一个名称,您可以通过右键单击“导航器”窗格中的源读卡器并选择编辑用户参数定义您可以在其中看到Name参数。

源数据集参数的名称通常可以通过在导航器窗格中右键单击读卡器并选择编辑用户参数定义来找到。

要获取不带扩展名的数据集名称(脚本中的sourcename),我们可以使用路径.basename())函数来自操作系统用于查找文件名的模块。这个SpultExter()函数将在第一个“.”处拆分文本,因为我们只关心文件名而不关心扩展名,我们只返回第一段带有[0]的文本。我们在文件名的末尾附加了“备份”。

我们通过选择目标文件夹(硬编码为工作空间路径)来完成创建完整的zip路径。添加“\ \”,文件名(sourcename)并添加“_backup”。注意,因为反斜杠字符是Python中的转义字符,我们需要在文件路径中使用双反斜杠。

下一步,我们需要找到包含要压缩的数据的文件夹,因为shapefile是基于文件夹的格式,所以您不能只复制.shp文件。因为我们已经找到了源数据集文件的文件路径,我们可以用path.dirname ()函数获取包含数据的文件夹的文件路径(脚本中的源代码)。

为了防止覆盖同名的现有数据集,源数据集的zip文件备份只有在源数据集不存在的情况下才会创建。如果确实如此,只有一条消息将打印到日志中。这是由an控制的如果/其他语句。最后三行是用于调试的打印函数。

如果备份位置中已经存在同名文件,则在翻译日志窗格中打印的消息。在这种情况下,将不会创建zip文件。

运行工作区(运行>运行工作区或按F5)。工作区运行完成后,转到C:\临时文件夹。您应该看到一个zip文件,其输入数据集名称的结尾是“_backup”。

注:你不需要写C:\TEMP。您可以将脚本更改为写入另一个硬编码文件路径,或者使用已发布的参数要求用户选择每次运行工作区时希望将zip文件写入的位置。

示例2:使用启动Python脚本自定义日志消息

附加工作区:startuppython2.fmw

日志文件已经包含了很多信息,但是如果您想将自定义消息写入日志文件,该怎么办呢?您可以使用启动python脚本向日志文件添加自定义消息,PythonCaller变压器,还有一个关闭python脚本。在这个例子中,您将使用启动Python脚本向日志文件添加一条短消息。

在使用以下启动python脚本运行fme之前,我们可以将自定义消息写入日志文件(请参见StartupPython2.fmw):

#import fme objects moduleimport fme objects创建名为loggerlogger=fme objects.fme log file()调用logmessagestring方法添加自定义的textlogger.logmessagestring(“您可以将自定义消息添加到日志文件”)演示打印语句将只打印到日志paneprint(“这将只打印到转换loG“窗格”

您可以使用FME对象模块访问日志文件,因此我们需要进口fmeobjects.然后通过调用fmeobjects.fmelogfile()。班级。然后对象调用日志消息字符串()方法将自定义文本添加到日志文件中。打印功能是演示将消息打印到翻译日志窗格不会出现在翻译日志文件中。

打开附加的工作区。它看起来应该非常类似于第一个示例。运行工作区(运行>运行工作区或按F5)。转到“翻译日志”窗格,在该窗格中单击鼠标右键。从菜单中选择“查找”并输入“log”。您应该看到文本“日志”的实例在翻译日志窗格。您将在窗格中看到自定义日志消息和突出显示的打印消息。

第一条突出显示的行是使用logger对象的logMessageString方法创建的。第二个突出显示的行是使用print函数创建的。

转到保存附加工作区的文件夹位置。日志文件应该保存在相同的文件夹位置(默认情况下),并且应该具有与工作区相同的名称,但是具有.log扩展名。用任何文本编辑器打开日志文件。使用搜索功能在日志中查找自定义消息。请注意,打印消息没有保存在翻译日志文件中。

注意,使用print函数添加的文本不会出现在日志文件中。只有使用logger对象的logMessageString方法添加的文本才会出现在日志文件中。

注意:将自定义消息写入日志文件的方法取决于它是在启动还是关闭阶段。在启动脚本中(因为FME已经打开了日志文件,多次打开是很危险的,你应该使用fmeobjects.fmelogfile()。.

文档

要访问Workbench中启动和关闭脚本的帮助文档,请到:启动和关闭python脚本

有关可用于启动python脚本的FME变量的完整列表,请转到:开始使用python

您可以在这里找到python FME对象API的完整文档:fme对象python api

数据属性

这里使用的数据来源于温哥华的城市,不列颠哥伦比亚省。它包含根据开放政府许可证(温哥华)获得许可的信息。

教程导航

前一篇:Python和FME基础知识

当前:在FME中启动Python脚本

下一个:python脚本化参数

第4部分:pythoncaller变压器

第5部分:在FME中关闭python脚本

python 脚本 初学者用蟒蛇 python启动脚本 清华大学,2017年12月14日00:26:39格林尼治标准时间 DebbiAt亚搏在线Safe
如何在python调用程序中操作属性值? https://knowledge.亚搏在线safe.com/questions/56813/how-to-manipulate-attribute-values-in-python-calle.html

谁能帮我理解一下如何使用python调用程序?我看过教程,旧的代码,甚至帮助我得到的错误是-Python的例外 :未定义全局名称“_file_contents”

我是 无法解决此问题。我需要将形状文件中的坐标与点云文件中的坐标匹配,并提取点云分类数据。我的逻辑有许多未解决的问题,但我的重要问题如下

如何在fme中的python调用程序中导入和操作属性值?

在我的空间,我有一个12点的shapefile。我提取它的坐标并将其作为字符串存储在_file_contents变量[的格式中(x, y), (x, y),]我需要对此进行大量的操作,但要了解我是否正确使用变压器,我正在执行第一个基本函数,从字符串中删除最后一个逗号。然而,我不断地得到我在上面发布的错误。

我已经附上了我的模板文件-点匹配.fmwt

初学者用蟒蛇 python调用程序 妈,2017年10月30日12:38:30格林尼治标准时间 斯拉普利
向输出文件名(python)中添加上个月的名称 https://knowledge.亚搏在线safe.com/questions/54573/adding-previous-month-name-to-output-filename-pyth.html

我正在寻找一种方法,以添加前几个月的名称的输出Excel的文件名,例如。文件名_august.xlsx。

我一直在尝试使用python(我是一个python初学者)作为私有参数,使用以下方法:

从datetime导入日期,timedelta本月的第一天=日期.today()。替换(day=1)上一天前一个月=本月的第一天-timedelta(days=1)前一个月的名称=上一天前一个月。strftime(“%b”)打印前一个月的名称

这在python中行得通,但在FME中行不通。

有什么想法吗?

python 初学者用蟒蛇 脚本化python参数 星期二,2017年10月3日14:14:53格林尼治标准时间 克拉莱特达特
FME pythoncaller:用列表值替换光栅单元格值 https://knowledge.亚搏在线safe.com/questions/50857/fme-pythoncaller-replace-graster-cell-values-with-l.html(https://knowledge.safe.com/questions/50857/fme-pythoncaller-replace-graster-

我正在使用FME Workbench 2017,我想使用pythoncaller将多个光栅功能的单元值替换为同等大小的列表值。
输入光栅功能包括:
1.较大光栅的不同尺寸片段
2.第2条。以ASCII格式,
三。背景值为零。

对于每个光栅,我想用关联列表中的值替换大于零的光栅单元格值,其中,该列表的大小与每个光栅的所有非零值相同。

我是FME和python调用程序的新手,但我将在常规的Python控制台中使用以下代码来执行该任务:

my_graster[numpy.nonzero(my_graster)]=我的_列表

我的困惑在于正确地使用模板函数和类接口,所以我将输入光栅特性调用到pythoncaller中并对其进行操作。我总是收到错误,说“我的光栅”被识别为一个字符串,让我觉得我打错电话了。

是否还有一个FME函数具有与“numpi .nonzero()”相同的功能?


感谢您的帮助!!

python 蟒蛇 初学者用蟒蛇 清华大学,2017年8月17日14:14:06格林尼治标准时间 扎尔昆
简单的python示例脚本。 https://knowledge.亚搏在线safe.com/idea/44946/simple-python-example-scripts.html

简单的python脚本作为一个下拉式转换器或easy (easy search,(单击即可)访问初学者文档。对于初学者或新手用户来说,从空白的python屏幕开始是令人生畏的。

初学者用蟒蛇 结婚,2017年5月24日19:24:04格林尼治标准时间 莱斯菲利克斯
教程:python和fme基础知识 https://knowledge.亚搏在线safe.com/articles/706/python-and-fme-basics.html网站

本文是由5部分组成的系列文章的第1部分,旨在帮助您开始基本的Python和FME。本系列将包括对python编程语言的介绍,以及在fme中介绍python的主要应用:启动python脚本,脚本参数,pythoncaller/pythoncrator变压器,关闭python脚本。本文将向您介绍Python编程语言,并包含有关在FME工作台中使用Python的基本信息。

内容

  • 介绍
  • Python编程的基本资源
  • python解释器
  • python兼容性
  • python脚本中的fme参数
  • python脚本中的fme变量
  • FME对象和python
  • 教程导航

介绍

Python是一种编程语言,可以在FME中使用它来完成FME运行前或运行后的任务,也可以在FME中执行标准FME工具和转换器无法完成的任务*。例如,可以使用python脚本在转换之前或之后移动数据。在FME中可以使用python的主要位置有4个:

*重要提示:有许多FME转换器可以执行几乎每一项您可以想到的任务,而无需使用脚本。如果您正在考虑编写一个Python脚本来在FME中执行某些操作,那么您应该确保已经没有可用的现有转换器。请随时向FME社区咨询亚搏国际在线官网FME知识中心问答论坛.

点击在这里对于我们的FME传道者写的一篇有趣的博客文章,关于他在使用FME中可用的工具组合方面的经验,包括Python脚本和自定义转换器,加强他的FME计划。

Python编程的基本资源

python可以从巨蟒主网站.Python发行版也可以从激活物.

学习蟒蛇,有许多python图书可从出版商处获得,例如奥雷利,等。

三种免费资源是:

python解释器

FME安装自己的Python解释器,在Windows上运行FME的任何Python脚本都可以使用它,除非另有说明。在Mac和Linux上,FME使用系统python解释器。如果您希望fme使用不同的python解释器,工作台下面有一个设置工具>FME选项>翻译.

有关如何使用自定义解释器的更多信息,请参阅本文:

选择不同的python解释器(安装)

用户可以在下面选择用于翻译的python解释器fme工具>FME选项>翻译。选项包括使用FME自己的python解释器,ESRI Arcgis解释器或自定义解释器。

python兼容性

FME与许多Python版本兼容。您可以使用python兼容性工作台中的工作区参数导航器窗格。例如,python 3.0引入了与python 2.x不向后兼容的重要更改,因此为工作区设置最理想的兼容级别非常重要。有关更多信息,请参阅此页python兼容性.

注意,从FME 2019开始,python 2.7将是Windows平台的可选安装组件,不会使用默认安装设置进行安装。请参见Python 2.7弃用文章了解更多详细信息。

用户可以在“导航器”窗格中的“工作区参数>脚本>Python兼容性”下指定工作区的Python兼容性。

注意:工作区导航器窗口中的python兼容性参数优先于fme选项中的python解释器设置。

python脚本中的fme变量

许多与FME相关的python变量在FME启动和关闭脚本中可用。中可以访问这些变量fme模块,因此您需要包括语句进口FME来访问它们。例如FME.状态根据工作区的成功或失败,在转换结束时变量可以是真或假。可分别用于启动和关闭python脚本的FME变量的完整列表可在的帮助页上找到。启动和关闭python脚本在工作台中。

python脚本中的fme参数

FME相关变量之一,宏观价值观,是运行工作区时已知的每个FME参数的字典。字典按参数名称编制索引,并保存参数值。

这些参数值通常在python脚本中使用,例如,当您想知道读卡器或其他用户定义参数中使用的源数据集的文件路径时。您可以通过访问字典来获得FME参数的值宏观价值观.例如,如果要获取AutoCAD阅读器的源数据集参数的值,则调用该参数SourceDataset_ACAD,你可以像这样在Python中访问这个参数:

导入fme sourcedataset=fme.macrovalues['sourcedataset_acad']

我们还可以通过创建脚本参数并从脚本返回值来设置FME参数。这包括在脚本参数的文章.

运行工作区时,脚本化参数在启动脚本之前按照Navigator窗格中出现的顺序执行。

FME对象和python

通过使用来自FME对象Python API的FME类和方法,Python脚本中可以使用FME的许多核心功能。例如,您可以访问FME日志文件,FME参数,或使用任何FME方法,如获取区域重新设计,等等,API。要在python脚本中使用fme对象,您需要使用以下语句导入FME对象:

进口fmeobjects

这里可以找到FME对象API文档:fme对象python api

指导何时使用FME对象,请参阅:我什么时候应该使用FME对象

有关FME对象Python API的更多信息:python fme对象API

查看的录制2012年6月python网络研讨会.

教程导航

当前:python和fme基础

下一步:在FME中启动python脚本

第3部分:python脚本化参数

第4部分:pythoncaller变压器

第5部分:在FME中关闭python脚本

python 初学者用蟒蛇 清华大学,2015年10月8日19:14:15格林尼治标准时间 肯纳特保险亚搏在线柜