我正在尝试使用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”文件中)时,我无法使其正常工作。
有什么想法吗?
答案 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.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运行脚本。如果是这样,这可能对您有帮助: