第8页
斯潘4
我使用配置文件中的脚本参数,类似于许多博客文章中的解释。
脚本的位置通过“file(existing)”类型的公共参数传递。
当配置文件存储在文件系统的某个位置时,此参数有时包含一个绝对路径,但当配置文件存储在工作区附近时,有时它的一部分是FME参数,如$(FME\u MF\u DIR)。另外,在服务器上,我故意使用服务器参数,例如$(FME\u SHAREDRESOURCE\u DATA)。
为了解决这个问题,我不得不砍掉一条看起来很恶心的蟒蛇
import fme import ConfigParser import os import re fmeParam=重新编译(“\A\$\(FME\[A-Z]+\[A-Z]+\)”)fmeParamName=重新编译(“FME\[A-Z]+\[A-Z]+”)def findabSolutionPath(fileParamName):paramValue=格式宏值[fileParamName]fmeParamList=fmeParam.findall文件(paramValue)如果fmeParamList!=[]:fmeParamKey=fmeParamName.findall文件(fmeParamList[0])[0]fmeBasePath=格式宏值[fmeParamKey]relFilePath=fmeParam.split文件(paramValue)[1]absFilePath=操作系统路径连接(fmeBasePath,第,relFilePath)else:absFilePath=paramValue return absFilePath filePath=findAbsolutePath(“conffile”)conf=ConfigParser.ConfigParser配置分析器() 形态选择变换=lambda选项:选项确认读取(filePath)返回配置getint(“参数”,“MyNumber”)
测试是否存在FME参数,从宏值中筛选出获取它们所需的键,然后将它们粘在一起,以获得一个绝对路径,在该路径中可以找到配置文件。
会有这样的功能吗fme.getAbsolutePath路径('[key\u of \u filepath-parameter]')?
谨致问候,
马丁
赫尔莫特评论·
您好,我尝试将@david\r solution实现到Pythoncaller中,遗憾的是结果工作区无法运行,并且抱怨宏%s未定义。我需要解决方案,因为我读取了一个包含FME参数引用的参数集,并使用其中一个作为文件名传递给FeatureReader(对于windows路径)。如果我传递一个参数文件字符串,它会抱怨找不到该文件,尽管该文件确实存在。。
史蒂芬武评论·
你好,
也许我在这里遗漏了一些东西,但是当我在启动Python脚本中运行以下内容时:
打印“FME\u MF\u DIR的值为$(FME\u MF\u DIR)”
我得到的结果是:
FME\u MF\u DIR的值是C:\Users\SWu\AppData\Local\Temp/。
正在运行的FME的哪个版本不自动计算$(FME\u MF\u DIR)?
谢谢,
史蒂芬
大卫·r评论·
您好!
我编写了以下两个助手函数来实现这一点:
导入再导入操作系统路径def expand#fme#macros(input):#展开输入字符串匹配中的所有fme宏值=关于芬德尔(“\$\((\w+)\”,输入)对于匹配项中的组:输入=输入.替换(“$(%s)”%组,FME_MacroValues[group])return input def get_fully_qualified_path(input):#将输入字符串扩展为绝对路径input=os.path.abspath路径(展开\u fme \u宏(输入))目录=操作系统路径目录名(输入)如果不是dir:input=操作系统路径连接(FME\u MacroValues['FME\u MF\u DIR',input)返回os.path.abspath路径(输入)
使用展开\u fme \u macros()对于一般字符串,以及获取\u完全\u限定的\u路径()路径和文件名。
用法,假设参数值“FME\u MF\u DIR”=“c:\my\u data\u DIR”
这适用于FME\ U宏值中的任何值,特别是:
希望这有帮助。
大卫
谢谢,这是一个非常优雅的解决方案,可以替换$()包围的每个参数。可能会使用findall和.replace(“$(%s)”)在我的代码中至少整理double reg ex和list索引。
仍然有明显的迹象表明,越来越多的人正在使用regex魔法来处理这个问题。
这让我有点不安,因为可能有一个真正的值符合regex,但不是FME参数,使得工作区在搜索时出现“key not found”错误或类似的错误格式宏值字典。
希望安全软件承担代码责亚搏在线任。今天下午发现了这个问题的原因,编写了上面的代码,但是在我相信它在高负载的生产环境中之前,必须先习惯一下。
谨致问候,
马丁
编辑:我的回答是素食主义者用“价值观符合”代替“肉”。
分享你的好主意,或者投票支持别人的想法。
©2019安全亚搏在线软件公司|法律