SPSS语法之外的Python函数




我正在尝试用Python删除一些SPSS多个响应集。以下内容保存在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"文件中)时,我无法使其工作
有什么想法吗?

您使用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中。你必须知道你在做什么。

您可以将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

最新更新