SPSS语法之外的Python函数

时间:2019-02-06 11:16:10

标签: python spss


我正在尝试使用Python删除一些SPSS Multiple响应集。 以下内容以SPSS语法保存,并且只要我在“ list.txt”文件(在语法的目录中)中具有集合的名称,便可以使用:

begin program.
import spss, spssaux, SpssClient, os, sys
SpssClient.StartClient() 
working_directory_path = os.path.dirname(SpssClient.GetDesignatedSyntaxDoc().GetDocumentPath()) 
SpssClient.StopClient()
def delete_function(dir_path, filename):
    path_file = str(dir_path) + "\\" + filename
    print path_file
    with open(path_file) as f:
        result = ["$" + x.replace('\n',"") for x in f.readlines()]
    names = [x for x in spss.GetMultiResponseSetNames()]
    for i in result:
        if i in names:
            spss.Submit('MRSETS /DELETE NAME=[{}].'.format(unicode(i, "utf-8")))
    print(spss.GetMultiResponseSetNames())
delete_function(working_directory_path, 'list.txt')
end program.

但是当我将函数移出语法之外(在单独的“ function.py”文件中)时,我无法使其正常工作。
有什么想法吗?

2 个答案:

答案 0 :(得分:0)

您随SPSS一起安装的Python应该在SPSS环境中运行-即要从SPSS语法运行的Python代码。据我了解,它对您来说很好。

如果将代码移到SPSS环境之外,则某些代码行将毫无意义。例如,BEGIN PROGRAM/END PROGRAM是SPSS命令,而不是Python命令。他们告诉SPSS他们之间有Python代码。他们对Python没有意义。

取决于尝试运行function.py(SPSS-Python或独立Python)时使用的是哪种Python安装,某些模块可能不可用(spss, spssaux, SpssClient)。它们没有捆绑到标准的Python库中,仅在SPSS-Python中可用。

此外,在您的代码中:

  • 您所引用的是SPSS语法,当您从SPSS外部运行该语法时可能无法打开
  • 您正在尝试运行一些SPSS语法代码(spss.Submit),这可能再次导致错误

您的想法有问题的原因可能还有十二种:)

最重要的是:您不能仅仅从SPSS中提取代码并将其运行到python中。你必须知道自己在做什么。

答案 1 :(得分:0)

您可以将python函数放入单独的脚本中,然后将其导入SPSS中,如下所示:

begin program. 

import sys
sys.path.append("C:\SomeDirectory") # directory containing the function.py file

import spss 
import function

function.delete_function(working_directory_path, 'list.txt')

end program. 

现在,您可以在不使用SPSS语法定义函数的情况下调用该函数。注意,如上导入,您在模块名称“ function.delete_function()”之后调用该函数

我不确定这是您想要的还是要从外部Python-IDE运行脚本。如果是这样,这可能对您有帮助:

https://www.ibm.com/support/knowledgecenter/en/SSLVMB_22.0.0/com.ibm.spss.statistics.python.help/spss/programmability_option/python_package_xdrives.htm