我有一堆SPSS数据和语法文件,它们每天都在移动,每天都在更改文件夹。但是,相对路径保持不变。有没有办法利用这个事实?例如:使用INCLUDE命令并引用一个语法文件,该文件始终是一个路径级别;或使用GET打开文件(位于两个级别上)
在谷歌搜索中,我发现了对HOST命令的一些引用,但是我并没有使它起作用。
任何输入将不胜感激:)
提前谢谢
您可以使用python获取SPSS语法的相对路径(前提是已保存)。
SpssClient.GetDesignatedSyntaxDoc().GetDocumentPath()
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用pythons os模块(或其他方式)从中导航到所需的任何文件夹。下面是一个检索语法的保存文件位置的示例,然后又检索下两个级别的示例。它还返回一个宏,其中包含以字符串形式存储的相关文件夹路径,以便以后可在SPSS命令(例如GET,INCLUDE等)中使用它们。
* Run this in any saved SPSS syntax to test *.
begin program.
import spss,spssaux,SpssClient, os
SpssClient.StartClient()
synPathL0U = os.path.dirname(SpssClient.GetDesignatedSyntaxDoc().GetDocumentPath())
SpssClient.StopClient()
synPathL1U=os.path.dirname(synPathL0U)
synPathL2U=os.path.dirname(synPathL1U)
print "synPathL0U =",synPathL0U
print "synPathL1U =",synPathL1U
print "synPathL2U =",synPathL2U
spss.SetMacroValue("!synPathL0U",spssaux._smartquote(synPathL0U+"\\"))
spss.SetMacroValue("!synPathL1U",spssaux._smartquote(synPathL1U+"\\"))
spss.SetMacroValue("!synPathL2U",spssaux._smartquote(synPathL2U+"\\"))
end program.
/* Check results - Echo should relay back the desired folder paths */.
echo !synPathL0U.
echo !synPathL1U.
echo !synPathL2U.
Run Code Online (Sandbox Code Playgroud)
一种巧妙的实现方法,将其包装在一个小的自定义扩展命令中,从而避免所有语法中的样板。
为此,将BEGIN PROGRAM/ 之间的上述代码复制END PROGRAM到一个函数Run(args)(称为)的python文件中 很容易SET_JOB_CWD.py。此处分配给文件的名称是相关的,将是以后用来调用此扩展命令的名称。
因此SET_JOB_CWD.py将包含:
def Run(args):
import spss,spssaux,SpssClient, os
SpssClient.StartClient()
synPathL0U = os.path.dirname(SpssClient.GetDesignatedSyntaxDoc().GetDocumentPath())
SpssClient.StopClient()
synPathL1U=os.path.dirname(synPathL0U)
synPathL2U=os.path.dirname(synPathL1U)
spss.SetMacroValue("!synPathL0U",spssaux._smartquote(synPathL0U+"\\"))
spss.SetMacroValue("!synPathL1U",spssaux._smartquote(synPathL1U+"\\"))
spss.SetMacroValue("!synPathL2U",spssaux._smartquote(synPathL2U+"\\"))
Run Code Online (Sandbox Code Playgroud)
然后还创建一个SET_JOB_CWD.xml包含以下代码的相应文件:
<Command xmlns="http://xml.spss.com/extension" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="SET JOB CWD" Language="Python">
</Command>
Run Code Online (Sandbox Code Playgroud)
然后,无论扩展文件被路由到哪里,这两个文件都应保存(要知道此文件夹位置SHOW EXTPATHS.以SPSS语法运行,则为“ EXTPATHS EXTENSIONS”显示的位置就是该文件夹。
现在,只要在SPSS中保存了语法即可。你可以简单地运行SET JOB CWD.,它会返回SPSS宏!synPathL0U,!synPathL1U,!synPathL2U包含存储为字符串相关的文件夹位置。