Функция Python вне синтаксиса SPSS - PullRequest
0 голосов
/ 06 февраля 2019


Я пытаюсь удалить некоторые наборы множественных ответов SPSS с помощью Python.Следующее сохраняется в синтаксисе 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 голосов
/ 12 февраля 2019

Вы можете поместить свои функции 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

0 голосов
/ 06 февраля 2019

Предполагается, что Python, который вы установили с помощью SPSS, работает в среде SPSS, то есть код Python, запускаемый из синтаксиса SPSS.Как я понимаю, он отлично работает для вас.

Если вы переместите код за пределы своей среды SPSS, некоторые строки кода не будут иметь смысла.Например, BEGIN PROGRAM/END PROGRAM - это команды SPSS, а не команды Python.Они говорят SPSS, что между ними есть код Python.Они не имеют смысла для Python.

В зависимости от того, какую установку Python вы используете при попытке запустить function.py (SPSS-Python или автономный Python), некоторые модули могут быть недоступны (spss, spssaux, SpssClient),Они не включены в стандартную библиотеку Python, они доступны только с SPSS-Python.

Кроме того, в вашем коде:

  • вы ссылаетесь на синтаксис SPSS, который можетне быть открытым, когда вы запускаете его извне SPSS
  • вы пытаетесь запустить некоторый синтаксический код SPSS (spss.Submit), что снова может привести к ошибке

И естьвероятно, еще дюжина причин, по которым ваша идея проблематична:)

Итог: вы не можете просто взять код из SPSS и запустить его в python.Вы должны знать, что вы делаете.

...